假设您有一个带有UI层,ViewModel和存储库的MVVM应用程序。假设在您的存储库中,您正在使用Single
改造调用从API中获取一些数据,并将其转换为可用于UI的viewstate对象。
从我的角度来看,您有两个主要选择(假设您想在UI层中使用LiveData,我不包括从UI观察Rx类型的选项):
将Rx Observable
从存储库中暴露出来,并将subscribe()
暴露在ViewModel中。在订阅者的onNext()
中,使用setValue()
将您的viewstate对象包装在MutableLiveData
中,并将其作为不可更改的LiveData
公开给UI。在onCleared()
中手动处置订阅。
从存储库中公开您的Rx Observable
,并让ViewModel通过LiveDataReactiveStreams
的{{1}}对其进行订阅,在这种情况下,无需手动处理,也就没有了完全fromPublisher()
。 但是,MutableLiveData
会在LiveDataReactiveStreams
处于活动/非活动状态(也就是至少有一个观察者)时进行订阅/取消订阅,因此,该选项将停止每次配置更改时的所有流处理,这与(1)(尽管,只有LiveData
是冷的)。
此分析是否不正确或不完整?这两种方法之间还有其他重要区别吗?