我最近开始在 Android 中使用 Flows。我读到 Flows 很冷 StateFlows 很热,那么为什么我们更喜欢使用 Android 的 StateFlows 而不是 Flows?使用 Flows 会不会更好,因为它们会在应用程序进入后台时停止生产者?在 Android 开发中是否存在应该在 Stateflow 上使用 Flows 的场景?
最佳答案
StateFlow
的优势超过常规 Flow
是如果国家不是理想的国家,前者将停止浪费资源。
如果你看the official StateFlow documentation您会在示例中注意到其中的关键部分,我引用:
// Trigger the flow and start listening for values.
// Note that this happens when lifecycle is STARTED and stops
// collecting when the lifecycle is STOPPED
最后一点很重要。一个 Hot
只要启动它的范围,就会收集值的流,并且在停止时将停止。这不是普通的 Flow/Livedata 会做的事情,因此会浪费潜在的资源来保持一系列组件的工作,例如,在 UI 停止时。重要的是要了解
LiveData
和 StateFlow
与两个重要区别相似(与上述相关,并在链接文档中进行了解释):StateFlow
需要将初始状态传递给构造函数,而 LiveData
才不是。LiveData.observe()
当 View 进入 STOPPED 状态时自动取消注册消费者,而从 StateFlow 或任何其他流收集不会自动停止收集。要实现相同的行为,您需要从 Lifecycle.repeatOnLifecycle
收集流。堵塞。换句话说,你可以说
StateFlow
是一种可能更高效的 LiveData,它使您能够说:如果状态是 XYZ,则停止收集和使用资源,因为我有我的理由(例如:我的 UI 不见了,所以我不需要听我的东西无法处理)。
关于Android Flow 与 StateFlow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69551675/