【发布时间】:2011-08-26 00:40:38
【问题描述】:
我的应用程序使用由 BOOT_COMPLETE BroadcastReceiver 启动的服务,如下所示:
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, MyService.class));
}
如果在我的应用程序的一个活动中,我尝试像这样绑定到这个服务:
getApplicationContext().bindService(new Intent(getApplicationContext(), MyService.class),
_serviceConnection, Context.BIND_AUTO_CREATE);
创建了一个新的服务实例,尽管第一个实例(由广播接收器创建)仍在运行。我在服务的 onCreate() 方法和第一个方法中记录了进程 ID 服务在与活动不同的进程中运行,第二个实例是在与活动相同的进程中创建的。我尝试在清单的服务元素中设置一个 android:process 参数(前导:和没有前导),但结果保持不变。
如何绑定到在不同进程中运行的服务,而不是在 Activity 运行的进程中创建新实例?
【问题讨论】:
-
为什么广播接收器和活动在不同的进程中运行?这是必要的吗?你需要 AIDL 和进程间通信来做你想做的事。
-
@bigstones:广播接收器没有必要在不同的进程中运行。显然,这只是android默认设置的方式。如何让广播接收器和我的主要活动在同一个进程中运行?
-
默认情况下,它们应该在同一个进程中运行,AFAIK。您可以发布清单吗?
-
@bigstones:我刚刚更改了我的服务的 onBind() 方法以返回一个aidl Binder,而不是我之前使用的 Messenger。不幸的是,结果还是一样。
-
@bigstones: manifest 是 here(稍微混淆了)。
标签: android service process ipc broadcastreceiver