我有一个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)”行时,它将正常关闭!
在这种情况下,如何确保服务正常关闭?
EDIT:
好的,我读了这个讨论:Is quitting an application frowned upon? .
现在我重建我的活动 . 我有一个使用startService调用服务的活动,之后它绑定服务 . 当活动被销毁时,它会调用unbindService .
服务本身在onStartCommand中返回START_STICKY,以使其更难杀死它 . 所有工作完成后,它会调用stopSelf .
现在我遇到的问题是,如果绑定仍然存在,我会收到ServiceConnectionLeaked消息!怎么样?我怎么能阻止这个?
1 回答
使用
finish()
而不是System.exit(0)