如何使用LiveData替代LocalBroadcastManager

4

以前,我们使用LocalBroadcastManager在服务和活动之间进行通信。但现在它已经过时,官方文档建议使用LiveData代替。那么如何使用LiveData从服务传递数据到活动呢?


嘿,欢迎来到StackOverflow。另一种选择是让您的服务更新数据存储库中所需的任何数据,并且使您的活动(可能通过ViewModel)观察相同的数据。这避免了全局/单例事件总线和类似的问题(这些都很糟糕),并以单向方式发送数据。这样做更好吗?“是”,但是否令人烦恼?可能是。 - Martin Marconcini
它被弃用的原因除了违反许多“原则”外,还因为它是本地的,所以你正在广播到一个设计用于向整个系统(非本地广播)广播的系统上,因此你在同一个进程中,并且使用意图会增加开销(和意图本身的限制)。因此,这个想法不是“只是弃用”这个类,如果你愿意,仍然可以使用它,而是改变你思考组件间通信的范式。 - Martin Marconcini
非常感谢@Martin Marconcini。 - Iqbal Singh
@MartinMarconcini 如果我的服务生成的数据是单向数据,不需要存储用于后续运行,有没有避免使用存储库的方法? - Sri Harsha Chilakapati
1个回答

3

一个不错的替代方案是:

  1. 将你想要读取/写入的数据定义为 LiveData 对象,存储在 Repository 中
  2. 让你的 Activity 观察该 LiveData(最好使用一个 ViewModel 在 Repo 和 Activity 之间进行交互。详情请参阅:https://developer.android.com/topic/libraries/architecture/viewmodel
  3. 使你的服务调用一些 Repository 的 saveXXX() 或 updateXXX() 方法来更新你的数据,Activity 将自动获取更新!

你也可以按照此指南构建良好的应用程序架构:https://developer.android.com/jetpack/docs/guide


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接