Skip to content
阅读进度

LiveData StateFlow SharedFlow 怎样选择? ​

返回 架构与 SDK 目录

标准回答 ​

LiveData 是生命周期感知的可观察数据容器;StateFlow 适合表达有当前值的状态,订阅者能获得最新状态;SharedFlow 更适合可配置重放与缓冲的广播式流。Flow 还包括按收集启动的冷流,不能把所有 Flow 都当成同一类行为。(StateFlow API)

机制解释 ​

View 页面收集 Flow 时要绑定生命周期。Fragment 通常使用 viewLifecycleOwner.lifecycleScope 和 repeatOnLifecycle,避免 View 销毁后继续更新旧绑定。StateFlow 会根据相等性合并状态,不能原地修改同一个可变对象后期待每次都发射。

延伸追问 ​

SharedFlow 默认就能保证 Toast 事件不丢不重吗?不能。没有订阅者时的行为受 replay、缓冲等配置影响;导航、支付结果等重要结果更适合形成可确认的状态与消费协议,而不是只发一个瞬时事件。

内容来源 ​

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