带有MVVM的RxJava:带有setValue()与LiveDataReactiveStreams的MutableLiveData

时间:2018-12-13 23:19:51

标签: android rx-java2 android-livedata android-mvvm

假设您有一个带有UI层,ViewModel和存储库的MVVM应用程序。假设在您的存储库中,您正在使用Single改造调用从API中获取一些数据,并将其转换为可用于UI的viewstate对象。

从我的角度来看,您有两个主要选择(假设您想在UI层中使用LiveData,我不包括从UI观察Rx类型的选项):

  1. 将Rx Observable从存储库中暴露出来,并将subscribe()暴露在ViewModel中。在订阅者的onNext()中,使用setValue()将您的viewstate对象包装在MutableLiveData中,并将其作为不可更改的LiveData公开给UI。在onCleared()中手动处置订阅。

  2. 从存储库中公开您的Rx Observable,并让ViewModel通过LiveDataReactiveStreams的{​​{1}}对其进行订阅,在这种情况下,无需手动处理,也就没有了完全fromPublisher()但是MutableLiveData会在LiveDataReactiveStreams处于活动/非活动状态(也就是至少有一个观察者)时进行订阅/取消订阅,因此,该选项将停止每次配置更改时的所有流处理,这与(1)(尽管,只有LiveData是冷的)。

此分析是否不正确或不完整?这两种方法之间还有其他重要区别吗?

0 个答案:

没有答案