【问题标题】:I have a question about SharedFlow with the page lifecycle我对页面生命周期的 SharedFlow 有疑问
【发布时间】: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


    【解决方案1】:

    使用Empty事件处理,意外发现在fragment的onStarted中接收到事件并发送给Activity时,Activity的sharedFlow订阅数为0,所以Activity无法收到它。 在我的理解中,activity不应该先到onStart,然后再到fragment的onStart吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      相关资源
      最近更新 更多