我有一个服务,它与清单和MapboxMap
活动中定义的过程不同,我只是想知道如何使用LocalBroadcastManager
在服务和活动之间进行通信。
我尝试将服务上下文传递给LocalBroadcastManager.getInstance()
,然后在我的Activity中注册LocalBroadcast
。它已成功注册,但无法从我的服务中获取信息!
这是我的代码,在我的服务中...
Intent locationIntent = new Intent("LocationIntent");
locationIntent.setAction("updatedLocations");
locationIntent.putExtra("list",updatedList);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(locationIntent);
...我将其注册到我的活动中:
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceive``r(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Timber.tag("localB").d("registered!");
if (intent != null && intent.getAction() != null &&
intent.getAction().equals("updatedLocations")) {
sawLocationsList = (HashMap<Integer,
MarkerItem>)intent.getSerializableExtra("list");
Timber.tag("sawL").d("updated");
}
}
} , new IntentFilter("LocationIntent"));
当我运行该应用程序时,我的服务会发送广播,但我的活动未收到广播消息!
我认为问题是因为我的服务是在清单中的另一个过程中定义的,就像这样...
android:name=".services.ForegroundService"
android:enabled="true"
android:exported="false"
android:process=":ForegroundService"
...但是我想以这种方式进行交流,因为处于不同的过程可以帮助我实现电池效率目标。
答案 0 :(得分:3)
如何在不同的过程中使用LocalBroadcastManager在活动和服务之间进行通信
这是不可能的。 LocalBroadcastManager
中的“本地”表示“此过程本地”。 LocalBroadcastManager
特别不适用于进程之间。
要么:
将活动和服务都置于同一过程中,或者
使用某种形式的IPC在进程之间进行通信(系统广播,Messenger
等)