如何在不同进程中使用 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
等)
我有一个服务在清单中定义的不同进程中,还有一个 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
等)