请帮我理解冷流和热流的区别🥲
文档说。the code inside a flow builder does not run until the flow is collected好的,这很容易检查,因为我们可以使用创建一个流程flow { },并且内部的代码{ }在我们调用之前不会真正执行collect()。
他们在Android 文档中写道:
Unlike a cold flow built using the flow builder, a StateFlow is hot: collecting from the flow doesn't trigger any producer code. A StateFlow is always active and in memory...
我不明白,这些流的活动是什么?
- 它可能有什么样的生产者代码
StateFlow?常规流有一个 builderflow {},而它们StateFlow只是有一个函数StateFlow<T>(),其参数传递初始值。如果它只是一个函数参数,那么它是什么样的生产者代码? - 他们这样写
StateFlow is always active,但在这段测试代码中,collect()代码不会在没有调用的情况下执行,就像常规flow { }.活动可能还有其他含义,但我不明白到底是什么。
fun main() = runBlocking {
val stateFlow = MutableStateFlow(0)
stateFlow.onEach {
println(it)
}.collect() // без collect() код внутри onEach не выполняется
stateFlow.emit(2)
}
简而言之,“冷”流仅在有调用时才起作用。 “热”——无论您是否访问它,它都有效。
从API的角度来看: