最近,我們從 android 生命周期庫版本 2.6.0-alpha01 開始有了一個新的 API,即
collectAsStateWithLifecycle(...)
谷歌開發者在本文中提倡
如果您使用 Jetpack Compose 構建 Android 應用,請使用
collectAsStateWithLifecycle可組合功能(而不是collectAsState)
我試了一下,對于流(冷流),例如
val counter = flow {
var value = 0
while (true) {
emit(value )
delay(1000)
}
}
擁有它是有用的
flow.collectAsStateWithLifecycle(0)
但是如果我們有一個像 mutableStateFlow 這樣的熱流
val stateFlow = MutableStateFlow(0)
擁有似乎沒用
stateFlow.collectAsStateWithLifecycle(0)
鑒于它不會阻止任何排放。
我是否正確地說collectAsStateWithLifecycle只對冷流有用,但對熱流沒有用?
如果我錯了,你能告訴我一個collectAsStateWithLifecycle對熱流也有用的例子嗎?
uj5u.com熱心網友回復:
對于流依賴于有消費者使其變熱的任何情況,它都是有用的。
如果你只是val stateFlow = MutableStateFlow(0)按照你說的去做,它不會改變任何東西,不。
然而,一個重要的“熱流”情況是使用stateIn函式使流變熱,使用WhileSubscribed策略作為 的SharingStarted引數stateIn。在這種情況下使用訂閱collectAsStateWithLifecycle意味著當生命周期至少不是STARTED或您傳遞給的任何內容時,流將沒有訂閱者minActiveState。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/523293.html
