1

我看过很多关于停止绑定服务的帖子,但大多数只是对 Android API 的误解,没有人回答我的问题。我也没有在 Android Developers 网站上找到答案(我可能错过了一些东西)。

我有一个可以启动和绑定的服务。我知道stopService()如果客户仍然绑定到它,调用不会停止我的服务(因此onDestroy()不会被调用)。

但是,我想在stopService()被调用时在服务中做一些事情,即使这不会停止它(因为它的“启动”行为与其简单的“绑定到”行为略有不同)。

我知道即使服务已经启动,onStartCommand()只要调用它就会调用它,但只调用一次(当服务启动时)。startService()onCreate()

我想要的是一个类似的回调onStopCommand(),它会在被调用时stopService()被调用,即使onDestroy()在仍然绑定的服务的情况下没有被调用,但是 AFAIK 这不存在,不是吗?

我考虑解决问题的选项如下,但我不喜欢其中任何一个:

  1. 将我的服务拆分为 2 个服务(1 个已启动,1 个已绑定)
  2. 在我的服务中实现一个stop()方法,我应该在之前的任何地方调用它stopService()(我可以通过活页夹来做到这一点)。

您如何看待这些解决方案?你有更好的主意吗?

编辑:这是我的服务的“已启动”和“绑定到”行为之间的差异的更详细描述:

让我们将我的服务称为 S1。它包含一个状态,可以通过绑定到它来从其他活动和服务访问。还有另一个服务,S2,只能绑定到。

通过 启动时startService(),S1 绑定到 S2 以侦听 S2 中可以更改 S1 中状态的事件。

当通过 停止时stopService(),我希望 S1 与 S2 解除绑定(并停止更新其状态)。现在我在onDestroy().

我的问题是,如果客户端绑定到 S1,S1 不会停止,因此不会与 S2 解除绑定。

我希望它有助于理解我的问题。

4

1 回答 1

1

这不存在,不是吗?

你是对的——它不存在。

这不存在,不是吗?

两者都应该工作。很难指出哪个可能更可取,因为我们对您的应用了解不多。

你有更好的主意吗?

只使用一种或另一种模式。很少有服务需要命令和绑定模式。

于 2013-03-21T18:36:50.183 回答