【发布时间】:2018-02-22 18:26:14
【问题描述】:
我有旧的 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);向Activity发送消息,Activity通过BroadcastReceiver订阅onResume的消息,并在onPause取消订阅。
我说得对吗,在这两种情况下都可以使用LiveData 来简化事情?
IntentService 应该创建LiveData 并且想要结果的人应该observe 它,
当新数据到达时IntentService 应该调用postValue,
或者可能有一些珊瑚礁阻止LiveData在这里的使用?
【问题讨论】:
-
是的,你可以这样做
-
使用ResultReceiver进行Activity到IntentService的通信,可以在这些组件之间交换数据。它对于替代解决方案很有用。