1 冷流
// 冷流collect 又是挂起函数,会阻塞,会等flow大括号的代码都执行完成之后,才会继续执行之后的代码。
val scope = MainScope()
scope.launch {
flow<Int> {
emit(1)
emit(2)
delay(2000)
}.collect{
Log.e("cccccc===$it")
}
Log.e("cccccc===冷流之后")
}
2 热流
// replay 代表新的消费者处理之前发送的事件个数
// extraBufferCapacity 缓存个数 总的缓存数量是 replay + extraBufferCapacity
// onBufferOverflow 当emit提交消息速度过快的时候,超出缓存的消息的处理策略
val _sharedFlow = MutableSharedFlow<Int>(
replay = 1,
extraBufferCapacity = 0,
onBufferOverflow = BufferOverflow.SUSPEND
)
// MutableStateFlow 也是热流,必须有一个初始值,所有的消费者只会收到最新的值
val state =MutableStateFlow(0)
//热流的collect也是挂起还是,因为是持续监听,所以后面的代码没有机会执行