pvn*_*pvn 15 android kotlin-flow
我最近开始在 Android 中使用 Flows。我读到 Flows 很冷 StateFlows 很热,那么为什么我们应该更喜欢使用 StateFlows for Android 而不是 Flows 呢?使用 Flows 不是更好吗,因为当应用程序进入后台时它们会停止生产者?在 Android 开发中是否存在应该使用 Flows 而不是 Stateflow 的场景?
Mar*_*ini 17
与常规的优势在于,如果国家不是所需的国家,前者将停止浪费资源。StateFlowFlow
如果您查看官方 StateFlow 文档,您会注意到示例中的关键部分,我引用:
// Trigger the flow and start listening for values.
// Note that this happens when lifecycle is STARTED and stops
// collecting when the lifecycle is STOPPED
Run Code Online (Sandbox Code Playgroud)
最后一点很重要。Hot只要启动的范围已启动,就会收集值的流,并且在停止时停止。这不是正常的 Flow/Livedata 会做的事情,因此浪费了潜在的资源来保持一系列组件的工作,例如,在 UI 停止时。
重要的是要理解 和与两个重要区别相似LiveData(StateFlow与上述相关,并在链接文档中进行了解释):
StateFlow需要将初始状态传递给构造函数,而不LiveData需要。
LiveData.observe()当视图进入 STOPPED 状态时,会自动取消注册使用者,而从 StateFlow 或任何其他流收集不会自动停止收集。要实现相同的行为,您需要从块收集流Lifecycle.repeatOnLifecycle 。
换句话说,你可以说这StateFlow是一个潜在更高效的 LiveData,它让你能够说:如果状态是 XYZ,那么停止收集和使用资源,因为我有我的理由(例如:我的 UI 消失了,所以我不不需要听我无法处理的东西)。
Ale*_*tyl 10
使用 Flows 不是更好吗,因为当应用程序进入后台时它们会停止生产者?
这不是真的。Flow当应用程序处于后台时,其本身不会停止发射。事实上,该Flow界面属于Kotlin的协程,对Android一无所知。
简而言之,Flow每次发出新值时, a 都会给你一个新值。A StateFlow,除了 aFlow是什么之外,它还始终持有一个值。这使它们成为代表国家的理想选择(顾名思义)。
在 Android 开发中是否存在应该使用 Flows 而不是 Stateflow 的场景?
当您不需要维护值和关心排放时,可以使用 Flow。一个例子是按钮按下或用户事件。AStateFlow对于表示状态很有用(例如在 ViewModel 中)
首先,我想提一下,如果你检查源代码的实现,StateFlow 已经实现了 Flow 接口。StateFlow 是可观察的数据持有者,它始终给出管道的最后一个值。实际上将其与 LiveData 进行比较是有意义的。你已经说得对了,它是热的,不像水流是冷的。如果您想在应用程序进入后台时停止生产者,Channel API 更适合此目的。如果我们知道 Flow 的目的是什么,您可以通过 Flow API 处理多个挂起方法。例如:您可以连续观察两个挂起函数。
| 归档时间: |
|
| 查看次数: |
11136 次 |
| 最近记录: |