【发布时间】:2022-11-03 15:44:11
【问题描述】:
SharedFlow虽然是非粘性的,每个结果只会被处理一次,但是在上传过程中,如果返回桌面,在没有接收端的情况下, SharedFlow 将丢弃现有的消息,而不是暂停事件并等待另一个接收者依次处理它们。 例如:在上传之前发送加载,这样界面就有了加载框,但是应用程序上传过程是在后台处理的,成功或失败事件也是在处理后在后台发送的。 不会收到取消加载框的消息,页面的Loading弹窗会一直存在。 我的解决方案:使用[kotlinx.coroutines.flow.StateFlow],或者将[kotlinx.coroutines.flow.MutableSharedFlow]的replay设置为1 在这一点上,它是粘性的。 Empty 事件被添加到事件中,并且 Empty 不被处理。 UI端处理完其他事件后,发送Empty事件。 或者使用flow的[kotlinx.coroutines.flow.MutableSharedFlow.resetReplayCache]清空replay 展开【Lifecycle.State】为Created,虽然可以接收,但是UI不会处理。
【问题讨论】:
标签: android kotlin kotlin-coroutines lifecycle flow