【问题标题】:The main difference between SharedFlow and StateFlowSharedFlow 和 StateFlow 的主要区别
【发布时间】:2021-02-11 20:47:45
【问题描述】:

SharedFlowStateFlow有什么区别?

以及如何在MVI架构中使用这些?使用简单的 Flow 还是使用这些作为状态和事件更好?

【问题讨论】:

  • 阅读this post
  • StateFlow 是一个 SharedFlow,它保留一个值的历史记录,您可以直接检查而无需收集。

标签: android kotlin


【解决方案1】:

Flow 是冷的!,这意味着它仅在收集数据时才发出数据。 Flow 也不能保存数据,把它当作水在其中流动的管道,flow 中的数据只流动,不存储(没有 .value 函数)。

与 flow 不同,stateflow 和 sharedflow 是热流,这意味着即使没有收集器,它们也会发出数据。此外,如果有多个收集器,将为每个收集器运行一个新流程,彼此完全独立。 SharedFlow 和 StateFlow 是允许在多个收集器之间共享自身的流,因此只有一个流有效地为所有同时收集的收集器运行。如果你定义了一个访问数据库的 SharedFlow,它被多个收集器收集,那么数据库访问只会运行一次,结果数据将共享给所有收集器。

SharedFlow 和 StateFlow 有什么区别?

状态流

Stateflow 通过构造函数获取一个初始值并立即发出它 当有人开始收集时。 Stateflow 与 LiveData 相同。 当视图进入 STOPPED 时,LiveData 会自动取消注册消费者 状态。收集 StateFlow 时,这不会自动处理,您可以 如果您想在 STOPPED 上取消注册消费者,请使用 repeatOnLifeCyCle 范围 状态。 如果您想要当前状态,请使用 stateflow(.value)。

共享流

StateFlow 只发出最后一个已知值,而 sharedflow 可以配置多少个 要发出的先前值。 如果要发出和收集重复值,请使用 sharedflow。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 2013-06-17
  • 2023-03-14
  • 2012-07-09
  • 1970-01-01
相关资源
最近更新 更多