我有一个 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 消息!那是怎么回事?我怎么能防止这种情况?