我已经创建了我的DataStore
并且我有一个布尔值:
private val DID_REBOOT = booleanPreferencesKey("did_reboot")
val didRebootFlow: Flow<Boolean> = context.dataStore.data
.map { preferences ->
preferences[DID_REBOOT] ?: false
}
suspend fun setDidReboot(didReboot: Boolean) {
context.dataStore.edit { preferences ->
preferences[DID_REBOOT] = didReboot
}
}
现在,BroadcastReceiver
我需要检查这个值。根据值,我需要执行数据库操作:
GlobalScope.launch {
if(ds.didRebootFlow.first()) {
Log.d("-----------------", "true")
} else
Log.d("-----------------", "false")
}
在我的应用程序的某个地方,我设置didRebootFlow
为true
. 但是我的广播正在打印false
(在第二次尝试中它工作正常)。
2021-04-27 12:42:24.347 7469-7469/com.test.datastore D/-----------------: false
我是挂起函数的新手,Flow
无法弄清楚如何使我的代码工作。
我的代码逻辑强烈依赖于该字段的值。如何在didRebootFlow
这里(并立即)到达一次?
我不想使用.collect { }
,因为我不想didRebootFlow
连续“观察”。我只想得到它的价值一次。(因为didRebootFlow
不停地观察意味着我会做很多数据库操作)。