Android - 在调用stopService时销毁服务

时间:2015-01-26 12:35:28

标签: android service ondestroy

我有一个后台服务,当我在UI上按下相应的按钮时,我开始并停止使用startService()stopService()(分别是“连接”和“断开连接”)。

当服务停止时,我执行了很多清理操作,并且我将它们放在服务的onDestroy()中,假设只要调用stopService()就会调用它们。但是,我发现在调用onDestroy()时不会立即调用stopService()。它可能会在一段时间内调用,或者在非常很长时间之后调用。

我可以做些什么来确保在调用stopService()后立即执行清理操作(只要有人点击“断开连接”按钮就会触发)?我是否 采用bindService()方法,还是有其他方法?

注意:该服务在同一个应用程序中独立运行。

2 个答案:

答案 0 :(得分:2)

来自文档:

  

请求停止使用stopSelf()stopService()系统   尽快销毁服务。

     

但是,如果您的服务处理多个onStartCommand()请求   同时,你不应该在完成后停止服务   处理一个开始请求,因为你可能已经收到了一个   新的启动请求(在第一个请求结束时停止)   终止第二个)。要避免此问题,您可以使用   stopSelf(int)确保您停止服务的请求   始终基于最近的启动请求。也就是说,当你打电话   stopSelf(int),你传递开始请求的ID(startId   传递给停止请求所对应的onStartCommand())。   然后,如果服务在您能够之前收到新的启动请求   要调用stopSelf(int),那么ID将不匹配,服务将匹配   不要停止。

由于stopSelf()stopService()会尽快终止服务,因此可能还有其他因素会使其保持活跃状态​​(因为您说onDestory()有时需要很长时间这似乎就是这种情况)。您可能希望监视服务是否存在可能阻止服务及时关闭的传入活动。

答案 1 :(得分:0)

致电finish()中的stopService()。这将调用onDestroy()