我使用以下语句来停止在后台运行的下载服务(扩展了IntentService):
context.stopService(intent);
但是这个语句并没有立即调用onDestory()方法的服务,而是需要一些时间来调用onDestroy()服务方法。
@Override
public void onDestroy() {
Log.d("JSLog", "on destroy called");
super.onDestroy();
}
在点击stopService()语句后我应该怎么做,它应该立即调用该服务的onDestroy()方法。
答案 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里面完成)。