数据绑定中的 Android StateFlow 或 MutableStateFlow

jus*_*ser 1 android kotlin android-databinding kotlin-coroutines

我正在 DataBindings 中尝试 StateFlow,在我能找到的所有示例中,大多数看起来都像这个的副本,ViewModel 中使用两个变量来进行一个数据绑定。一个私有 MutableStateFlow 和一个公共 StateFlow。StateFlow 几乎只是从 MutableStateFlow 读取值。为什么是这样?仅使用一个变量(MutableStateFlow)并跳过 StateFlow 变量不是更容易吗?

Hen*_*ist 5

这只是一个简单的封装案例(与数据绑定/Android无关)。从技术角度来看,这是一个多余的步骤,并且没有什么区别。然而,从设计的角度来看,它限制了StateFlow对包含类之外的值的修改。

MutableLiveData这是“可观察数据持有者”(和)的常见模式LiveData,可以认为类似于拥有带有私有设置器的属性。事实上,如果您只需要收集流而不访问其值,您甚至可以用作Flow公开类型(尽管正如 @MarkKeen 指出的那样,这不适用于数据绑定)。

  • 如果使用数据绑定,您需要 `LiveData<T>` 或 `StateFlow<T>` - 这些是所需的基本类型,因为两者都允许访问更改时的最新值,而 `Flow` 则不允许。 (3认同)