2011-03-25 62 views
0

在我的应用程序的主要活动,我开始一个服务是这样的:为什么停止我的服务杀死前台活动?

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

当用户按下一个按钮,我停止服务是这样的:

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

当我这样做,前景导致通话被中止并消失的活动。

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

看来,我不能停止服务,而不会杀死整个应用程序。有没有解决的办法?

+0

这不是正常的行为。启动ddms,重新创建错误并发布日志。 – 2011-03-25 01:15:58

回答

0

我想通了,为什么这个应用程序被杀害。在我服务的的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); 
0

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

在任何情况下,你所描述的是不是预期,但我们需要更多的信息,以提供更好的答案

+0

好的建议,但我检查了无声的catch块,以及不正确的调用完成(),并且什么都没发现。 – 2011-03-26 04:28:26

相关问题