SharedFlow和StateFlow的方案选择-屏幕旋转设计
关键区别和选择建议
StateFlow vs SharedFlow 对于屏幕旋转
特性 | StateFlow | SharedFlow (with replay) |
---|---|---|
数据保持 | 自动保持最后1个值 | 需要显式配置 replay = 1 |
使用场景 | UI 状态(计数、文本、加载状态) | 事件(Toast、导航、一次性消息) |
初始化 | 必须有初始值 | 可以没有初始值 |
推荐度 | ⭐⭐⭐⭐⭐ (用于状态) | ⭐⭐⭐⭐ (用于事件) |
最佳实践建议
- 对于 UI 状态:总是使用 StateFlow
private val _state = MutableStateFlow(initialValue) val state: StateFlow<Type> = _state.asStateFlow()
- 对于一次性事件:使用 SharedFlow 并合理配置
// 需要重放的事件 private val _events = MutableSharedFlow<EventType>(replay = 1)// 不需要重放的事件(如导航) private val _navigationEvents = MutableSharedFlow<NavigationEvent>()