测试下生产数据比消费数据快,Flow中的被压处理。
Kotlin
fun simpleFlow(): Flow<Int> = flow {
for (i in 1..5) {
delay(200) // 生产者:每200ms生产一条数据
Log.d("zxzx", "生产者生产了:$i")
emit(i)
}
}
private fun testFlow2() { // 测试被压(Backpressure)
lifecycleScope.launch {
Log.d("zxzx", "开始执行背压演示...")
simpleFlow()
.buffer(3) // 缓冲3个元素
.collect { value ->
Log.d("zxzx", "消费数据:$value")
delay(1000) // 消费者:每1000ms消费一条数据
}
Log.d("zxzx", "所有任务完成")
Log.d("zxzx", "虽未谱金兰,前生信有缘;\n忠勇付汉室,情义比桃园。\n匹马单枪出重围,英风锐气敌胆寒;\n一袭征袍鲜血染,当阳常志此心丹。\n子龙,子龙,世无双;\n五虎上将威名传。")
}
}
打印日志:

ok. buffer函数意思是可以在消费者处理数据跟不上时缓存数据。
如果不调用buffer函数缓存数据,日志如下:

不用缓存,可以看出生产速度变慢了,消费的时候才生产,因为Flow是冷流,消费时才生产。 而上面用缓存的时候,生产速度可以快于消费速度。