Ahm*_*lla 36 android kotlin kotlin-coroutines
我正在掌握 Kotlin 协程并试图弄清楚
1-什么是热流和冷流?
2-它们之间的主要区别是什么?
3-什么时候使用每一个?
Bal*_*ngh 32
冷流在开始收集值之前不会开始产生值。另一方面,热流立即开始产生值。
我建议阅读以下内容以了解热蒸汽和冷蒸汽的使用:
https://developer.android.com/kotlin/flow/stateflow-and-sharedflow
冷流是按需创建的,并在观察到它们时发出数据。热流始终处于活动状态,并且无论是否观察到它们\xe2\x80\x99,都可以发出数据。
\n主要区别在于,冷流是一种在新订阅者收集时按需执行生产者代码块的流。热流始终处于活动状态。
\n请参阅“Google Android 开发人员”小组中 Manuel Vivo 的文章中的用法示例:
\n热流:无论侦听器是否存在,事件都会被发出。
现实生活中的例子
你在去电影院看巴本海默的路上遇到了交通堵塞。电影要开始了,放映员不会等你。
冷流:只有在侦听器存在的情况下才会发出事件。
现实生活中的例子
您想在电视上观看点播的《蜘蛛侠 ATSV》。它将根据您的要求(即当您订阅时)为您播放。
如果流体需要一台收集器,那么冷流就是您所需要的。除非有收集器,否则它不会被触发。每个收集器都有自己的底层冷流实例。它被收集起来并完成并消失。
另一方面,热流并不太关心当时是否正在收集它。它始终存在(在内存中),直到被 GC 处理并从可能的多个协程发出事件。如果各方感兴趣,他们可以通过调用 进行订阅collect,并且所有收集器都将获得从该热流发出的相同事件。很像活动巴士。
与冷流不同,即使没有订阅者/收集者并且默认情况下它们处于活动状态,热流也始终位于内存中。冷流是惰性的。但是,热流更适合在多个观察者之间共享状态。
如果您有多个收集器共享一个状态,那么您可以选择状态流,以避免潜在的繁重后台操作。
您可以将冷流暴露给 UI 层(即:视图模型),然后将其转换为热流(例如,使用shareIn),这样您就可以将热流的范围限定到视图模型。
| 归档时间: |
|
| 查看次数: |
30153 次 |
| 最近记录: |