【发布时间】:2022-10-15 17:17:33
【问题描述】:
我在 Android 的 repeatOnLifecycle 块内订阅 Kotlin SharedFlow 布尔值。我想订阅,直到收到第一个 true 布尔值并采取行动。
一旦收到第一个 true 布尔值,我需要取消订阅并在生命周期范围内运行处理函数,以便在生命周期转换为无效状态时取消它。
当我在当前范围上调用取消并将处理代码嵌入NonCancellable 上下文时,它不会在生命周期事件中被取消。
我想我想要takeWhile 之类的东西,包括与谓词不匹配的第一个元素。
下面是一些示例流程,我想在其中收集所有元素,直到 $ 符号:
true $ ...
false, true $ ...
false, false, true $ ...
示例代码:
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
flowOfInterest.collectLatest {
if (it) {
stopCollection()
doOnTrue()
} else {
doOnFalse()
}
}
}
}
实现此行为的正确/最简单方法是什么?
谢谢!
【问题讨论】:
标签: android kotlin kotlin-coroutines android-lifecycle kotlin-flow