我想创建一个共享视图模型,用于 MainActivity 与片段之间的通信。我决定使用共享流来管理事件。
private val _sharedChannel: MutableSharedFlow<SharedEvent> = MutableSharedFlow(
replay = 0,extraBufferCapacity=0,onBufferOverflow = BufferOverflow.SUSPEND)
val sharedChannel = _sharedChannel.asSharedFlow()
我不需要缓存最后一个事件,即使方向改变也是如此。所以我设置了“replay = 0”
当我仅在主要活动中收集事件时 - 一切正常:
lifecycleScope.launchWhenStarted {
gamePlaySharedViewModel.sharedChannel.collect { event->
SnappLog.log("GamePlayContainer-> sharedChannel EVENT: $event ")
when(event){
GamePlaySharedViewModel.SharedEvent.OnBackPress -> {
onBackPressed()
}
is GamePlaySharedViewModel.SharedEvent.BlockScreen -> {
blockScreen(event.isBlocked)
}
else -> {
}
}
}
}
}
将第二个订阅者添加到另一个片段时 - 两个订阅者在第一个之后都停止接收事件(第一个事件发送成功..)我可以做些什么来订阅多个 MutableSharedFlow?我试图增加“重播”的数量并更改“onBufferOverflow” - 似乎没有任何效果..