1

我想创建一个共享视图模型,用于 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” - 似乎没有任何效果..

4

0 回答 0