我正在探索谷歌的Android Architecture Components。在我的项目中,我依赖于Services和IntentServices。从一个IntentService或Service与应用程序的ViewModel进行通信的正确方法是什么?使用LiveData可以实现吗?
postValue
)。它很适合更新 UI(ViewModel 到 Activity 的通信),因为它具有生命周期感知功能。当您不更新 UI 时,可以考虑使用 RxJava。
这取决于你遵循的架构。如果你正在执行类似于应用程序架构指南中描述的操作,则你的IntentService可能是由远程数据源代码启动的:
你的远程数据源代码应该有一个可观察对象(Rx Flowable,LiveData等),我将其称为可观察对象A,用于由你的意图服务下载的数据。如果你使用Repository类,则它应该有一个可观察对象B,而你的ViewModel则应该有一个可观察对象C。LiveData
有两个注意事项 - 如果您需要在执行后台操作时更新 LiveData,请使用postValue
。
LiveData
是 lifecycle-aware 的,这使它特别适合由具有生命周期的内容(活动/片段)观察。observe
方法需要一个 LifecycleOwner
。
对于您的 Repository/Networking 代码中的 B 和 A 这样的观察者,可能不会有 LifecycleOwner。这意味着要么做类似使用 observerForever
的事情,要么使用另一个可观察对象,如 RxFlowable。