是否可以从 a 中读取/写入原始类型DataStore
?例如,我只想阅读一个Int
. 我不希望有任何Flow
缠绕它。很简单Int
。
问问题
110 次
1 回答
2
在写作方面,不使用流。您可以保存文档中概述的原语,除非您另有说明,否则这将在后台线程上完成。
对于阅读,DataStore
仅出于某种原因返回流。正如@CommonsWare 在评论中所说:“读取值可能需要磁盘或其他形式的 I/O,因此他们选择实现反应式 API,以便可以在后台线程上执行 I/O。”
通过使用挂起函数,您可以Int
按照您在流程上使用first()
终端运算符的描述返回一个,它返回发出的第一个值。
suspend fun read(): Int {
return dataStore.data.first()[KEY] ?: DEFAULT_VALUE
}
如果您确实需要同步调用,那么您可以runBlocking
结合使用来阻止线程first()
,但是正如他们在文档中警告的那样:
尽可能避免阻塞 DataStore 数据读取的线程。阻塞 UI 线程会导致 ANR 或 UI jank,阻塞其他线程会导致死锁。
因此,如果这是必要的,那么您的应用程序的总体设计可能存在问题。
于 2021-04-26T12:24:06.660 回答