如何解决流程 - 暂停/恢复流程
在 RxJava 中,valve
运算符允许暂停(和缓冲)流并再次恢复流(并且在恢复后立即发出缓冲值)。它是 rx java 扩展 (https://github.com/akarnokd/RxJavaExtensions/blob/3.x/src/main/java/hu/akarnokd/rxjava3/operators/FlowableValve.java) 的一部分。
kotlin 流程有类似的东西吗?
我的用例是,我想观察 Activity 中的流并且永远不会丢失事件(就像我用 LiveData
来做的那样,例如,如果 Activity 暂停,它会停止观察数据)。因此,当活动暂停时,我希望流缓冲观察到的值,直到活动恢复并在活动恢复后立即发出它们。
因此,在创建活动时(直到它被销毁),我想观察流程,但我只想在活动处于活动状态时发出值,并在活动不活动时(但仍创建)缓冲这些值,直到它得到再次活跃。
有什么东西可以解决这个问题,或者有没有人写过一些东西来解决这个问题?
解决方法
Lifecycle.launchWhenX
和 SharedFlow
的组合应该可以解决问题。下面是一个简单的例子,它使用每秒发出一个数字的流。
// In your ViewModel
class MainViewModel : ViewModel() {
val numbers = flow {
var counter = 0
while (true) {
emit(counter++)
delay(1_000L)
}
}
.shareIn(
scope = viewModelScope,started = SharingStarted.Lazily
)
}
// In your Fragment.onViewCreated()
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.numbers
.collect { number ->
Log.d("asdf","number: $number")
}
}
这是有效的,因为当 Lifecycle.launchWhenStarted
进入停止状态时,Lifecycle
会暂停协程,而不是取消它。当您的 Lifecycle
在暂停后恢复到开始状态时,它会收集处于停止状态时发生的所有事情。
您可以使用 lifecycleScope.launchWhenStarted
https://developer.android.com/kotlin/flow/stateflow-and-sharedflow#stateflow
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。