外观
LiveData StateFlow SharedFlow 怎样选择?
标准回答
LiveData 是生命周期感知的可观察数据容器;StateFlow 适合表达有当前值的状态,订阅者能获得最新状态;SharedFlow 更适合可配置重放与缓冲的广播式流。Flow 还包括按收集启动的冷流,不能把所有 Flow 都当成同一类行为。(StateFlow API)
机制解释
View 页面收集 Flow 时要绑定生命周期。Fragment 通常使用 viewLifecycleOwner.lifecycleScope 和 repeatOnLifecycle,避免 View 销毁后继续更新旧绑定。StateFlow 会根据相等性合并状态,不能原地修改同一个可变对象后期待每次都发射。
延伸追问
SharedFlow 默认就能保证 Toast 事件不丢不重吗?不能。没有订阅者时的行为受 replay、缓冲等配置影响;导航、支付结果等重要结果更适合形成可确认的状态与消费协议,而不是只发一个瞬时事件。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q31