后台线程或非 UI 组件中的 LiveData

Wil*_*nda 5 android mvvm android-livedata

亲们。我曾经使用 MVP 模式开发 Android 应用程序,现在我正在尝试使用 DataBind 和 LiveData 等架构组件的 MVVM。

我编写了提供 LiveData 的 Repository 类:

LiveData<MyEntity> getById(long id);
Run Code Online (Sandbox Code Playgroud)

对于活动/片段,我观察到 ViewModel 公开的 LiveData(使用我的存储库)并且一切正常。

问题是我必须安排一个警报来显示一个带有与 MyEntity 相关的文本的通知,所以我创建了一个包含我的 MyEntityId 作为 Extra 的 Intent。

当 AlarmManager 调用我的 BroadcastReceiver 时,我需要使用 Repository 来获取 MyEntity。关键是如何“观察”非 UI 组件内的 LiveData。

此外,我可以启动一个 IntentService(后台线程)以避免访问主线程中的存储库,并使用 RxJava 中的“blockingNext”之类的东西,但我仍然无法找到等待 LiveData 的方法。

这样做的正确方法是什么?请注意,由于遗留问题,我的存储库可能无法使用 Room 实现。

谢谢

到目前为止,我想到的唯一解决方案是在存储库中有这样的方法:

LiveData<MyEntity> getByIdLive(long id);
MyEntity getById(long id);
Run Code Online (Sandbox Code Playgroud)

但这对我来说看起来并不好。所以我想问一下如何实现这一点的正确方法。

此致

mud*_*aza 0

您只能在 Activity/Fragment 等 UI 组件中观察 liveData。

对于您的场景,您可以创建一个观察者类,该类也可以在非 UI 类中观察,或者您可以使用 EventBus。

了解观察者: https: //developer.android.com/reference/java/util/Observer

关于EventBus: https: //github.com/greenrobot/EventBus