Flow 基础:05. 冷流 (Cold Stream) 特性

本篇解析 example-flow-05.kt。探讨 Flow 的一个关键特性:冷流

1. 什么是冷流?

Flow 是一种冷流。这意味着:flow { ... } 构建器中的代码在调用 collect 之前不会运行

代码解析

1
2
3
4
5
6
7
8
9
10
11
12
13
fun simple(): Flow<Int> = flow { 
println("Flow started")
for (i in 1..3) {
delay(100)
emit(i)
}
}

fun main() = runBlocking {
val flow = simple() // 这里只是创建了 flow 对象,不会打印 "Flow started"
flow.collect { println(it) } // 第一次收集,打印 "Flow started"
flow.collect { println(it) } // 第二次收集,再次打印 "Flow started"
}

2. 特点

  • 重复执行:每次调用 collect,Flow 都会重新开始从头运行。
  • 资源节省:如果不收集,就不会产生任何计算开销。

3. 开发者感悟

冷流就像是“按需播放”的视频。你不点播放(collect),它就不会产生流量。这与 Channel(热流)不同,Channel 无论有没有人在听,都会在后台运行。在 Android 开发中,这种冷流特性非常适合处理数据库订阅或 API 轮询。

,