Android Flow 与 StateFlow

标签 android kotlin-flow

我最近开始在 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 停止时。
重要的是要了解 LiveDataStateFlow与两个重要区别相似(与上述相关,并在链接文档中进行了解释):
  • StateFlow需要将初始状态传递给构造函数,而 LiveData才不是。
  • LiveData.observe()当 View 进入 STOPPED 状态时自动取消注册消费者,而从 StateFlow 或任何其他流收集不会自动停止收集。要实现相同的行为,您需要从 Lifecycle.repeatOnLifecycle 收集流。堵塞。

  • 换句话说,你可以说 StateFlow是一种可能更高效的 LiveData,它使您能够说:如果状态是 XYZ,则停止收集和使用资源,因为我有我的理由(例如:我的 UI 不见了,所以我不需要听我的东西无法处理)。

    关于Android Flow 与 StateFlow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69551675/

    相关文章:

    android - Jacoco 报告不排除指定文件

    java - 改造 2 : @Query "encoded=false" don't work

    android - LiveData 与 StateFlow : Should we switch from Live data to State Flow?

    java - 具有空默认选定项的微调器

    android无法从缓存目录打开pdf

    android - Kotlin 流程 : collect only elements which repeat at least N times

    android - 单元测试新的 Kotlin 协程 StateFlow

    kotlin - 如何从不同的函数发出 Flow 值? Kotlin 协程

    android - 在 Android ListView 中显示来自 Json String 的数据

    Android:Kotlin 从回调获取数据并随流发出