Android:通过服务在 ViewModel 中设置 LiveData

Android: Set LiveData in ViewModel from a Service

我设置应用程序的方式是,服务 将在后台获取一些信息,这些信息需要由 实时获取Fragment,然后显示到视图中。为此,我将数据放入 ViewModel 并让我的 Fragment 观察 ViewModel 中的 LiveData。

问题是,我在 setting/changing 来自服务的 ViewModel class 中的 LiveData 遇到了问题。 看来 ViewModel 应该是在活动和片段之间使用,我似乎无法在我的服务中获取 ViewModel 以更改我的片段需要观察的值。有没有办法实现这个?

您可能希望使用具有在您的服务中修改的自己的 MutableLiveData 字段的存储库。然后,您的 ViewModel 将有一个指向 Repository 字段的 MutableLiveData 字段,并且您的 Fragment 可以观察该字段。

片段:

...
viewModel.myData.observe(viewLifecycleOwner) { myData ->
    // handle new data observed
}
...

视图模型:

// Need to clear repo reference in [onCleared] to avoid resource leaks
private var _myData: MutableLiveData<MyData>? = myRepo.myData
val myData: MutableLiveData<MyData> = _myData
...
override fun onCleared() {
    super.onCleared()
    _myData = null
}

存储库:

val myData = MutableLiveData<MyData>() // or whatever source (Room, etc.)

服务:

...
Repository.getInstance().myData.postValue(/* some new info */)
...