和上面的StateFlow不同的是,这个不能主动通知collect方,需要不断emit元素,也就是利用了flow的功能 设计初衷不同 StateFlow的设计是为了取代ConflatedBroadcastChannel,用于表示状态,并且总是持有最新的状态值。 SharedFlow的设计是为了提供一个通用的、可共享的事件流机制,支持事件的重播、缓存等。 状态持有和重播不同 St...
StateFlow继承自SharedFlow,所以它是SharedFlow的一种特化实现。 public interface StateFlow<out T> : SharedFlow<T> { /** * The current value of this state flow. */ public val value: T } 应用场景 StateFlow:适用于状态管理场景,例如在ViewModel中表示UI状态。因为它始终持有最新的状态,能确保观察者总...
privateval _sharedViewEffects=MutableSharedFlow<SharedViewEffects>()// 1val sharedViewEffects=_sharedViewEffects.asSharedFlow()// 2 在这段代码中。 你调用MutableSharedFlow创建了一个可变的SharedFlow,它发出SharedViewEffects类型的事件,这是一个简单的Sealed Class来模拟可能的事件。注意,这是一个私有属性。你...
与StateFlow不同,SharedFlow没有初始值,必须emit()发送数据: valsharedFlow=MutableSharedFlow<Int>()runBlocking{launch{for(iin1..3){delay(1000)sharedFlow.emit(i)println("发送数据: $i")}}delay(1500)// 让数据先产生println("订阅者 1 开始收集")sharedFlow.collect{println("订阅者 1 收到: $it")}...
在Kotlin的协程库kotlinx.coroutines中,StateFlow和SharedFlow是两种用于处理事件流的API,它们有相似之处,但在设计上的初衷和内在机制上有明显区别。 这次我们就对StateFlow和SharedFlow进行深入对比: StateFlow和SharedFlow概述 StateFlow: 一种用于持有单一最新状态值并发射给多个观察者的热流。适合用于状态管理场景,例如...
SharedFlow和StateFlow是Kotlin中用于实现反应式流的两个关键组件,它们在处理异步数据、状态管理和事件驱动应用中发挥着重要作用。 1. SharedFlow SharedFlow是一个冷流(Cold Flow),意味着只有在订阅者订阅时才开始发射数据。它允许多个订阅者共享相同的数据流,每个订阅者都会接收到从流开始到结束的所有数据。SharedFlow...
而Kotlin Flow在可预见的时间里,我也上不太可能能在工作当中用得到,所以这个系列也就基本是属于我个人的学习笔记了。 今天的这一篇文章,我准备讲一讲StateFlow和SharedFlow的知识。内容和前面的两篇文章有一定的承接关系,所以如果你还没有看过前面两篇文章的...
StateFlow的设计是为了取代ConflatedBroadcastChannel,用于表示状态,并且总是持有最新的状态值。 SharedFlow的设计是为了提供一个通用的、可共享的事件流机制,支持事件的重播、缓存等。 状态持有和重播不同 StateFlow: 总是持有最新的状态值。 新的观察者会立即收到当前持有的状态值。
StateFlow 是一个热流(hot flow),它始终持有一个值并在值发生变化时发出更新。这使得 StateFlow 非常适合于表示可以随时间变化的状态,如 UI 控件的可见性或网络状态的变化。与之相对,SharedFlow 是设计用来传递事件的。它可以发出独立的、不连续的数据或事件,使其成为处理用户交互、网络响应或其他一次性事件的...
为了了解StateFlow和SharedFlow,你需要: 用SharedFlow实现一个事件流,处理多界面之间共享的事件。 重构CryptoStonks5000,使用StateFlow来处理界面的视图状态。 该项目遵循Clean Architecture和MVVM模式。 Crypto Stonks 5000 - Project structure 建立并运行该项目,以确保一切正常。在这之后,是时候学习SharedFlow了!