1

我有一个 android 应用程序,它使用以下命令在主要活动中启动服务:

bindService(new Intent(ctx, MyService.class), _connection, Context.BIND_AUTO_CREATE);

主要活动对这项服务没有任何作用(这就是我没有提供服务连接代码的原因)。这个想法是主要活动处理服务生命周期!

用户单击我的应用程序的“关闭”按钮后,它会使用此代码“停止”服务:

if (_service != null) {
    unbindService(_connection);
}
//Some cleanup here ...
System.exit(0);

我知道此时没有其他活动绑定到服务,因为每个活动都是从主活动调用的,并且它们在“onStop”处与服务解除绑定。

所以问题是当用户关闭应用程序时,我的服务不会调用“onDestroy”!当我删除“System.exit(0)”行时,它会正常关闭!

在这种情况下,如何确保服务正确关闭?

编辑:

好的,我阅读了这个讨论:退出应用程序是否令人不悦?.

现在我重建我的活动。我有一个使用 startService 调用服务的活动,之后它绑定了服务。当活动被销毁时,它会调用 unbindService。

服务本身在 onStartCommand 中返回 START_STICKY 以使其更难杀死它。完成所有工作后,它会调用 stopSelf。

现在我遇到的问题是,如果绑定仍然存在,我会收到 ServiceConnectionLeaked 消息!那是怎么回事?我怎么能防止这种情况?

4

1 回答 1

0

使用finish()代替System.exit(0)

于 2013-04-18T13:30:11.123 回答