如何在不同进程中使用 LocalBroadcastManager 在 Activity 和服务之间进行通信

How to Communicate between Activity and Service using LocalBroadcastManager in a different Process

我有一个服务在清单中定义的不同进程中,还有一个 MapboxMap Activity,我只是想知道如何在我的服务和 Activity 之间进行通信使用 LocalBroadcastManager.

我尝试将服务上下文传递给 LocalBroadcastManager.getInstance(),然后在我的 Activity 中注册一个 LocalBroadcast。注册成功但是无法从我的服务获取信息!

这是我的代码,在我的服务中...

Intent locationIntent = new Intent("LocationIntent");
        locationIntent.setAction("updatedLocations");
        locationIntent.putExtra("list",updatedList);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(locationIntent);

...我在 Activity:

中注册了它
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"));

当我 运行 应用程序时,我的服务发送广播,但我的 Activity 没有收到广播消息!

我认为问题是因为我的服务是在我的清单中的另一个进程中定义的,就像这样...

android:name=".services.ForegroundService"
            android:enabled="true"
            android:exported="false"
            android:process=":ForegroundService"

...但我想以这种方式交流,因为处于不同的过程有助于我实现电池效率目标。

How to Communicate between Activity and Service using LocalBroadcastManager in a different Process

这是不可能的。 LocalBroadcastManager中的"local"表示"local to this process"。 LocalBroadcastManager 特别是在进程之间不起作用。

或者:

  • 让 activity 和服务在同一个进程中,或者

  • 使用某种形式的 IPC 在进程之间进行通信(系统广播、Messenger 等)