Android-在调用stopService时销毁服务

Android-在调用stopService时销毁服务,android,service,ondestroy,Android,Service,Ondestroy,我有一个后台服务,当按下UI上的相应按钮(“连接”和“断开”)时,我会使用startService()和stopService()启动和停止该服务 当服务停止时,我会执行很多清理操作,我将这些操作放在服务的onDestroy()中,假设在调用stopService()时会调用这些操作。但是,我注意到在调用stopService()时,不会立即调用onDestroy()。它可能会在一段时间后调用,或者在很长一段时间后调用 如何确保在调用stopService()后立即执行这些清理操作(每当有人单击

我有一个后台服务,当按下UI上的相应按钮(“连接”和“断开”)时,我会使用
startService()
stopService()
启动和停止该服务

当服务停止时,我会执行很多清理操作,我将这些操作放在服务的
onDestroy()
中,假设在调用
stopService()
时会调用这些操作。但是,我注意到在调用
stopService()
时,不会立即调用
onDestroy()
。它可能会在一段时间后调用,或者在很长一段时间后调用

如何确保在调用
stopService()
后立即执行这些清理操作(每当有人单击“断开连接”按钮时就会触发)?我必须采用
bindService()
方法,还是有其他方法

注意:该服务在同一应用程序中自己的进程中运行。

调用
stopService()中的
finish()
。这将从文档中调用onDestroy()

一旦请求使用或停止,系统 尽快销毁服务

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


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

最简单的解决方案:stopService();cleanUpStuff();我在SO和其他几个地方读到了其他答案,即服务不会在调用stopService后立即终止。这是真的吗?此外,没有其他连接到我的服务或使其保持活动状态的功能。它不会在您调用
stopService
-它会尽快被销毁。基本上,这是安卓告诉你的方式,你不能保证服务会在某个特定的时间停止——就在操作系统开始的时候。服务不像普通的应用程序那样共享相同的生命周期,它们在不同的过程中运行,因此调用
stopService
实际上只是发出一个终止服务的请求,但你必须排队等待操作系统完成它正在做的任何其他工作,然后它才能开始最终终止它。