Use*_*ase 8 android android-jetpack-datastore
是否可以只从 a 读取/写入原始类型DataStore?例如,我只想阅读一个Int. 我不想让任何东西Flow包裹在它周围。只是简单Int。
在写作方面,没有使用流程。您可以按照文档中的概述保存原语,除非您另外指定,否则这将在后台线程上完成。
对于读取,DataStore仅返回一个有原因的流。正如 @CommonsWare 在评论中所说:“读取值可能需要磁盘或其他形式的 I/O,因此他们选择实现反应式 API,以便可以在后台线程上执行 I/O。”
通过使用挂起函数,您只需Int使用first()流程上的终端运算符即可返回您所描述的,该操作符返回发出的第一个值。
suspend fun read(): Int {
return dataStore.data.first()[KEY] ?: DEFAULT_VALUE
}
Run Code Online (Sandbox Code Playgroud)
如果您确实需要同步调用,那么您可以runBlocking结合使用来阻止线程first(),但是正如他们在文档中警告的那样:
尽可能避免阻塞 DataStore 数据读取的线程。阻塞 UI 线程可能会导致 ANR 或 UI 卡顿,阻塞其他线程可能会导致死锁。
因此,如果这是必要的,则您的应用程序的总体设计可能存在问题。
| 归档时间: |
|
| 查看次数: |
1048 次 |
| 最近记录: |