【原创】解决ShareFlow无法接收事件
在开发中遇到这样的情况,由于每次页面接收事件都需要如下:
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
flow.collect { state ->
......
}
}
}
所以我封装了下
inline fun <reified T> FragmentActivity.collectFlow(flow: SharedFlow<T>, crossinline next: (T) -> Unit) {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
flow.collect { state ->
next(state)
}
}
}
}
但是在使用时候无法页面无法接收到事件。经过排查应该是封装后导致事件收集滞后于viewModel中事件的发送事件。导致无法收集到事件。
在这里也了解到了ShareFlow的一个特性:数据发送时如果没有活跃的订阅者,数据会丢失。
MutableSharedFlow中有个参数replay,该参数就是需要保留的数据条数。
最终解决:需要设置 replay > 0 才能保留历史值,新订阅者才能收到最近的 replay 条数据。

浙公网安备 33010602011771号