Skip to content
阅读进度

Flow、StateFlow 与 SharedFlow 怎样选择? ​

返回 架构与 SDK 目录

标准回答 ​

Flow 是异步数据流抽象;普通 flow 构建器常产生冷流,收集时才开始执行。StateFlow 是有当前值的热流,适合状态;SharedFlow 可配置重放与缓冲,适合多订阅者广播。

关键机制 ​

  • StateFlow 需要初始值,向新订阅者提供当前状态,并按相等性合并更新;状态最好使用不可变对象。
  • SharedFlow 的 replay、缓冲和溢出策略要明确;没有订阅者时,一次性事件是否保留不能靠猜。
  • Android 页面使用 repeatOnLifecycle 等机制收集,避免不可见时持续做界面工作;生产端是否继续运行取决于其作用域与共享策略。

通俗例子 ​

设备当前在线状态用 StateFlow;轻提示如果用 SharedFlow,需要决定页面不在前台时是丢弃、缓存还是改为可恢复的 UI 状态。

易混淆点 ​

“热流自动感知生命周期”和“所有事件都应放 SharedFlow”都不成立,要说明订阅、重放和重复消费语义。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。