我看过很多关于停止绑定服务的帖子,但大多数只是对 Android API 的误解,没有人回答我的问题。我也没有在 Android Developers 网站上找到答案(我可能错过了一些东西)。
我有一个可以启动和绑定的服务。我知道stopService()
如果客户仍然绑定到它,调用不会停止我的服务(因此onDestroy()
不会被调用)。
但是,我想在stopService()
被调用时在服务中做一些事情,即使这不会停止它(因为它的“启动”行为与其简单的“绑定到”行为略有不同)。
我知道即使服务已经启动,onStartCommand()
只要调用它就会调用它,但只调用一次(当服务启动时)。startService()
onCreate()
我想要的是一个类似的回调onStopCommand()
,它会在被调用时stopService()
被调用,即使onDestroy()
在仍然绑定的服务的情况下没有被调用,但是 AFAIK 这不存在,不是吗?
我考虑解决问题的选项如下,但我不喜欢其中任何一个:
- 将我的服务拆分为 2 个服务(1 个已启动,1 个已绑定)
- 在我的服务中实现一个
stop()
方法,我应该在之前的任何地方调用它stopService()
(我可以通过活页夹来做到这一点)。
您如何看待这些解决方案?你有更好的主意吗?
编辑:这是我的服务的“已启动”和“绑定到”行为之间的差异的更详细描述:
让我们将我的服务称为 S1。它包含一个状态,可以通过绑定到它来从其他活动和服务访问。还有另一个服务,S2,只能绑定到。
通过 启动时startService()
,S1 绑定到 S2 以侦听 S2 中可以更改 S1 中状态的事件。
当通过 停止时stopService()
,我希望 S1 与 S2 解除绑定(并停止更新其状态)。现在我在onDestroy()
.
我的问题是,如果客户端绑定到 S1,S1 不会停止,因此不会与 S2 解除绑定。
我希望它有助于理解我的问题。