前置知识: Kotlin

Flow冷流与SharedFlow和StateFlow

00:00
1 min Advanced 2026/6/14

Kotlin Flow冷流与SharedFlow和StateFlow详解。

1. Flow(冷流)

val numbers = flow {
    for (i in 1..5) {
        emit(i)
        delay(100)
    }
}

// 每个收集者独立执行
numbers.collect { println(it) }  // 1,2,3,4,5
numbers.collect { println(it) }  // 1,2,3,4,5(重新执行)

2. SharedFlow(热流)

val sharedFlow = MutableSharedFlow<String>()

// 发射
sharedFlow.emit("event")

// 多个收集者共享
sharedFlow.collect { println("A: $it") }
sharedFlow.collect { println("B: $it") }

配置

MutableSharedFlow<String>(
    replay = 0,        // 新订阅者重放数量
    extraBufferCapacity = 64,
    onBufferOverflow = BufferOverflow.SUSPEND
)

3. StateFlow

val state = MutableStateFlow(0)  // 必须有初始值

state.value = 1  // 更新值
state.collect { println(it) }  // 总是能获取最新值

4. 对比

特性FlowSharedFlowStateFlow
冷/热
收集者各自执行共享共享
初始值必须
缓存replay 配置最新
去重自动(相同不发射)

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式