本文立足讲解flow的典型流程实现,示例代码如下,不清楚需要了解Flow的基本调用流程
调用示例
- 测试代码
@Test
fun testColdFeature() = runBlocking{
flow<Int>{
println("flow#emit lamda: emit 1")
emit(1)
println("flow#emit lamda: emit 2")
emit(2)
}.collect{
println("Collector#collect: ${it}")
}
}
- 输出结果
flow#emit lamda: emit 1
SafeCollector#emit#1
Collector#collect: 1
flow#emit lamda: emit 2
SafeCollector#emit#2
Collector#collect: 2
以上代码调用collect时,每有一个emit动作,就会触发一次collect lamda的打印操作,本文将会剖析整个调用流程
Flow核心流程实现
核心流程
interface Flow<out T> {
suspend fun collect(collector: FlowCollector<T>)
}
Flow所有的核心流程其实都是围绕Flow接口进行,Flow的概念可以用生产消费来描述,生产负责生产数据,比