StopService不会立即调用onDestroy

时间:2014-01-06 08:26:20

标签: android android-service

我使用以下语句来停止在后台运行的下载服务(扩展了IntentService):

    context.stopService(intent);

但是这个语句并没有立即调用onDestory()方法的服务,而是需要一些时间来调用onDestroy()服务方法。

@Override
public void onDestroy() {
    Log.d("JSLog", "on destroy called");
    super.onDestroy();
}

在点击stopService()语句后我应该怎么做,它应该立即调用该服务的onDestroy()方法。

3 个答案:

答案 0 :(得分:4)

在我的情况下,我按照Android Developers上的教程使用了ServiceConnection。在示例代码中,他们调用unbindService()但不调用stopService()。所以我添加了对stopService()的调用以阻止它,但仍然onDestroy()从未被调用过。

来自Context.stopService()的文档:

  

请注意,如果已停止的服务仍然绑定了绑定了它的ServiceConnection对象并且设置了BIND_AUTO_CREATE,则在删除所有这些绑定之前,它不会被销毁。

我将此解释为可以先调用stopService()stopSelf(),然后再调用unbindService()(我使用BIND_AUTO_CREATE) - 并且在调用unbindService()时将停止/销毁该服务。

但事实证明并非如此。当我移动东西以便我先调用unbindService()并在此之后调用stopService()时,我的onDestroy()会立即被调用。

答案 1 :(得分:1)

intentService有新的Thread,当你停止服务时,新线程现在不会停止,如果你想立即停止线程,我将在服务中扩展服务和新线程,当你需要停止服务时只需要中断线程。

答案 2 :(得分:1)

这是预期的行为,服务不会立即被销毁,就像一个Activity一旦完成就不会立即销毁(除非你在onCreate里面完成)。