【发布时间】:2021-02-11 20:47:45
【问题描述】:
SharedFlow和StateFlow有什么区别?
以及如何在MVI架构中使用这些?使用简单的 Flow 还是使用这些作为状态和事件更好?
【问题讨论】:
-
StateFlow 是一个 SharedFlow,它保留一个值的历史记录,您可以直接检查而无需收集。
SharedFlow和StateFlow有什么区别?
以及如何在MVI架构中使用这些?使用简单的 Flow 还是使用这些作为状态和事件更好?
【问题讨论】:
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。
【讨论】: