kotlin flow 冷流 热流 理解

89 阅读1分钟

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也是挂起还是,因为是持续监听,所以后面的代码没有机会执行