为什么停止我的服务会杀死前台活动?

时间:2011-03-25 01:09:33

标签: android service

在我的应用主要活动中,我启动了这样的服务:

Intent i = new Intent(this, MyService.class);
startService(i);

当用户按下按钮时,我会停止这样的服务:

Intent i = new Intent(this, MyService.class);
stopService(i);

当我这样做时,正在进行呼叫的前台活动被杀死并消失。

认为可能需要在单独的进程中运行服务,我尝试在清单中的服务上设置android:process =“:remote”,但这并没有改变行为。

似乎我无法在不杀死整个应用程序的情况下停止服务。有没有解决的办法?

2 个答案:

答案 0 :(得分:1)

我弄清楚应用程序被杀的原因。在我的服务的onDestroy()方法中,我正在禁用这样的广播接收器:

PackageManager pacman = getPackageManager();
pacman.setComponentEnabledSetting(
     new ComponentName(this, MyReceiver.class), 
     PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
     0);

此代码禁用AndroidManifest.xml中定义的广播接收器。最后一个参数0应该设置为DONT_KILL_APP。我将代码更改为此,它解决了问题:

PackageManager pacman = getPackageManager();
pacman.setComponentEnabledSetting(
     new ComponentName(this, MyReceiver.class), 
     PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
     PackageManager.DONT_KILL_APP);

答案 1 :(得分:0)

没有日志,我们无法确定,但我有一个很好的预感,你的应用程序正在抛出异常并且你正在默默地捕捉和关闭,或者你有一个奇怪的关键路径,呼叫finish

在任何情况下,您所描述的内容都不是预期的,但我们需要更多信息才能提供更好的答案