privateval _sharedViewEffects=MutableSharedFlow<SharedViewEffects>()// 1val sharedViewEffects=_sharedViewEffects.asSharedFlow()// 2 在这段代码中。 你调用MutableSharedFlow创建了一个可变的SharedFlow,它发出SharedViewEffects类型的事件,这是一个简单的Sealed Class来模拟可能的事件。注意,这是一个私有属性。你...
StateFlow继承自SharedFlow,所以它是SharedFlow的一种特化实现。 public interface StateFlow<out T> : SharedFlow<T> { /** * The current value of this state flow. */ public val value: T } 应用场景 StateFlow:适用于状态管理场景,例如在ViewModel中表示UI状态。因为它始终持有最新的状态,能确保观察者总...
和上面的StateFlow不同的是,这个不能主动通知collect方,需要不断emit元素,也就是利用了flow的功能 设计初衷不同 StateFlow的设计是为了取代ConflatedBroadcastChannel,用于表示状态,并且总是持有最新的状态值。 SharedFlow的设计是为了提供一个通用的、可共享的事件流机制,支持事件的重播、缓存等。 状态持有和重播不同 St...
2. 创建 SharedFlow 与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("订阅者 ...
SharedFlow和StateFlow是Kotlin中用于实现反应式流的两个关键组件,它们在处理异步数据、状态管理和事件驱动应用中发挥着重要作用。 1. SharedFlow SharedFlow是一个冷流(Cold Flow),意味着只有在订阅者订阅时才开始发射数据。它允许多个订阅者共享相同的数据流,每个订阅者都会接收到从流开始到结束的所有数据。SharedFlow...
StateFlow 是一个热流(hot flow),它始终持有一个值并在值发生变化时发出更新。这使得 StateFlow 非常适合于表示可以随时间变化的状态,如 UI 控件的可见性或网络状态的变化。与之相对,SharedFlow 是设计用来传递事件的。它可以发出独立的、不连续的数据或事件,使其成为处理用户交互、网络响应或其他一次性事件的...
Kotlin 中的 Flow 热流(Hot Flow)主要有 SharedFlow 和StateFlow 两种类型。 Kotlin Flow 热流概述 在Kotlin 协程中,Flow 默认是冷流(Cold Stream),即只有在订阅者 collect 之后,Flow 才会开始执行,并且每个订阅者都会从头开始收集数据。然而,在某些场景下,我们需要一个持续运行的热流(Hot Stream),例如实时股票行情...
而Kotlin Flow在可预见的时间里,我也上不太可能能在工作当中用得到,所以这个系列也就基本是属于我个人的学习笔记了。 今天的这一篇文章,我准备讲一讲StateFlow和SharedFlow的知识。内容和前面的两篇文章有一定的承接关系,所以如果你还没有看过前面两篇文章的...
SharedFlow: 一种通用热流,可以发射事件流而不是仅限于持有最新状态。适合处理事件总线、观察者模式等场景。 也就是一对多的关系,可以有多个collector 同时又具有flow的所有特点,比如可以挂起,切换线程 和上面的StateFlow不同的是,这个不能主动通知collect方,需要不断emit元素,也就是利用了flow的功能 ...
更自然的协程支持:Kotlin Flow是集成在Kotlin协程里面的,能更好地利用协程的特性,而且不需要额外引入其他的库。 更简单的语法和易用性:Kotlin Flow的API设计更加简洁,避免了RxJava中复杂的操作符,它利用了扩展函数和lambda表达式,使代码更直观易读。 内存安全...