2014-01-06 90 views
1

我用下面的语句停止下载服务(延伸IntentService)在后台运行:StopService不调用的onDestroy立即

context.stopService(intent); 

但这种说法并没有叫服务onDestory()方法立即,需要一段时间来调用onDestroy()方法的服务。

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

我应该做的命中stopService()语句之后,应该马上叫的onDestroy()服务的方法。

+1

http://stackoverflow.com/questions/10554465/how-to-stop-service-immediately – Riser

回答

1

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

1

这是预期的行为,服务不会立即被销毁,就像活动在完成后不会立即销毁一样(除非您在onCreate内完成)。

+0

那么我该如何阻止它呢?有什么办法吗? – Kanika

1

在我的情况下,我按照教程Android Developers,它使用ServiceConnection。在示例代码中,他们调用unbindService(),但从未使用stopService()。所以我加了一个叫stopService()的电话来停止它,但仍然没有叫onDestroy()

Context.stopService()文档:

注意,如果停止服务仍具有绑定到它与BIND_AUTO_CREATE集ServiceConnection对象,也不会被破坏,直到所有这些绑定被删除。

我解释这是它的好打电话stopService()stopSelf()第一,然后unbindService()之后(我使用BIND_AUTO_CREATE) - 以及在调用时unbindService(),该服务将被停止/销毁。

但事实证明情况并非如此。当我移动时,我先打电话unbindService(),然后打stopService(),我的onDestroy()立即被打电话。

相关问题