首页 > 解决方案 > LiveData 是热的还是冷的?

问题描述

我们知道 StateFlow 和 SharedFlow 很热门。

StateFlow 是一个热流——只要该流被收集或当垃圾收集根中存在对它的任何其他引用时,它就会保留在内存中。

SharedFlow 是一个热流,它向从它收集的所有消费者发出值。

流动本身是冷的。

流是类似于序列的冷流......

我有一个找不到直接答案的问题。LiveData 是热的还是冷的?

标签: androidandroid-livedatakotlin-flowkotlin-stateflowkotlin-sharedflow

解决方案


LiveData 不能与 Flow 直接比较。它与 StateFlow 最直接可比。

调用setDataLiveData 对象的代码总是会改变 LiveData 的状态,而不管它上面的任何观察者。在这方面,它很热——观察者的存在根本不重要。状态总是在变化,并且该状态被广播给任何观察者。

此外,LiveData 上的观察者总是会从中获取当前状态值——他们不会等待(或暂停)任何值变得可用。LiveData 必须始终具有值。在将任何其他数据放入其中之前,观察者将获得该值。

在这些方面,基于类似于 StateFlow 的使用模式,LiveData 很可能被认为是“热的”。


推荐阅读