LiveData VS Handler和LocalBroadcast的问题

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

我有旧的Android / Java代码,包含两个派生自IntentService,并且这些服务不在单独的进程中运行。

问题是关于从这些返回结果的方式IntentService

一个服务使用Handler+ 返回结果Runnable,在主循环中运行代码:

new Handler(Looper.getMainLooper()).post(new Runnable() {
    @Override
    public void run() {
        MyApplication.get().setFoo(someThing);
    }
});

另一个是LocalBroadcastManager.getInstance(this).sendBroadcast(in);用来发送消息ActivityActivity通过BroadcastReceiver消息中的onResume订阅,并取消订阅onPause

我是对的吗?LiveData在这两种情况下都可以用来简化事情吗?

提问于
用户回答回答于

我认为这LiveData不会帮助你将任何数据发送Service到其他组件。

从任何Service其他组件进行通信的问题是,通常不会直接获取对该组件的引用Service,因此无法直接“订阅”通知。

从理论上讲,如果Service运行在同一个进程中,你可以绑定它,获取Service对象的引用,然后直接执行订阅。但是,这往往是一个矫枉过正的问题,我不认为这种模式被广泛使用。

在你的例子中,有两种沟通机制:

  1. 服务静态地到达应用程序对象并设置一些数据。这是通过全球国家的沟通,通常被认为是反模式。
  2. 通过LocalBroadcastManager进行通信

从以上两种机制中,我只会使用#2并不惜一切代价避免#1。

用户回答回答于

这两种方法都可以使用LiveData,因为LiveData的目的是让它位于另一个线程上,并且在发生更改时仍会通知用户。似乎它肯定会取代LocalBroadcastManager.getInstance(this).sendBroadcast(in);而你的IntentService会有值。

扫码关注云+社区

领取腾讯云代金券