假设您有一个带有 UI 层、ViewModel 和 Repository 的 MVVM 应用程序。假设在您的存储库中,您通过Single
Retrofit 调用从 API 获取一些数据,并将其转换为 UI 就绪的视图状态对象。
在我看来,您有两个主要选择(假设您想在 UI 层使用 LiveData,我不包括从 UI 观察 Rx 类型的选项):
Observable
从存储库中公开您的 Rx ,并subscribe()
在 ViewModel 中公开。在订阅者的onNext()
中,使用setValue()
将您的 viewstate 对象包装在 aMutableLiveData
中,并将其作为非可变对象公开LiveData
给 UI。在 中手动处置订阅onCleared()
。从存储库中公开您的 Rx并让 ViewModel 使用's
Observable
订阅它,在这种情况下,手动处置是不必要的,而且根本没有。但是,只要变为活动/不活动(又名至少有一个观察者),就会订阅/取消订阅,因此此选项将在每次配置更改时停止所有流处理,这与 (1) 不同(尽管只有在冷的情况下)。LiveDataReactiveStreams
fromPublisher()
MutableLiveData
LiveDataReactiveStreams
LiveData
Observable
这种分析在任何方面都是不正确或不完整的吗?这两种方法之间还有其他重要区别吗?