外观
Flow、StateFlow 与 SharedFlow 怎样选择?
标准回答
Flow 是异步数据流抽象;普通 flow 构建器常产生冷流,收集时才开始执行。StateFlow 是有当前值的热流,适合状态;SharedFlow 可配置重放与缓冲,适合多订阅者广播。
关键机制
- StateFlow 需要初始值,向新订阅者提供当前状态,并按相等性合并更新;状态最好使用不可变对象。
- SharedFlow 的 replay、缓冲和溢出策略要明确;没有订阅者时,一次性事件是否保留不能靠猜。
- Android 页面使用 repeatOnLifecycle 等机制收集,避免不可见时持续做界面工作;生产端是否继续运行取决于其作用域与共享策略。
通俗例子
设备当前在线状态用 StateFlow;轻提示如果用 SharedFlow,需要决定页面不在前台时是丢弃、缓存还是改为可恢复的 UI 状态。
易混淆点
“热流自动感知生命周期”和“所有事件都应放 SharedFlow”都不成立,要说明订阅、重放和重复消费语义。
参考资料
内容来源
- Android 技术札记 · 原条目
flow