Android中的本地服务绑定 - 使用...或不使用?

时间:2015-05-14 17:06:11

标签: android android-service android-service-binding

所以我正在使用本地服务,我想让活动向服务发送一些命令。除了启动和停止之外,我还想为我的服务正在执行的活动执行暂停或重启命令(命令在这里并不重要,只是给它们作为示例。

我认为绑定到服务是正确的方法,但我不确定两件事。

  1. Android文档说从服务解绑会杀死它。如果我希望我的服务在后台运行怎么办...那么当我的Activity onCreate()s我要绑定到服务(控制它/发送命令)和onDestroy()时我想解开绑定来自服务的活动,但保持服务正常运行。

  2. 我无法理解关于Android开发的Big Nerd Ranch书中的这段摘录

  3.   

    这种模式看起来令人兴奋。它是Android中唯一的地方   使一个Android组件能够直接与另一个组件通信。我们不   但是推荐它。由于服务是有效的单身人士,使用   他们这种方式与使用单身人士相比没有什么好处   代替。

    它是否实质上告诉我bind是一个api,只是让事情变得有点太复杂而无法真正用于本地服务?

2 个答案:

答案 0 :(得分:4)

  

安卓文档说从服务中取消绑定会杀掉它。

更准确地说,当您调用unbindService()时,如果没有其他未完成的绑定,并且服务上没有任何名为startService()以使其以这种方式运行,则该服务将被销毁。

  

如果我希望我的服务在后台运行怎么办...那么当我的Activity onCreate()s我要绑定到服务(控制它/发送它命令)和onDestroy()时我会怎样?喜欢从服务中取消绑定Activity,但保持服务正常运行。

您必须同时使用startService()(以更好地控制服务的持续时间)和bindService()。而且,如果您所做的只是发送命令,我就会直接跳过bindService()并通过startService()发送命令。

  

我无法理解关于Android开发的Big Nerd Ranch书中的这段摘录

最后引用的句子是......奇怪的。

  

它是否实质上告诉我bind是一个api,只是让事情变得有点太复杂而无法真正用于本地服务?

这是对引用段落的合理解释。

就我个人而言,我发现绑定是各种身体部位的痛苦,超过它对当地服务的价值。 服务很重要,作为操作系统的一个指示,您正在进行后台工作,值得让您的流程保持更长时间。但是我将使用命令模式和事件总线而不是本地绑定。绑定本身是状态,需要根据配置更改进行管理。保留的片段比以前更容易,但它仍然在加剧。

绑定模式对于远程服务更为重要,其中客户端和服务位于不同的应用程序中。虽然这引入了许多令人兴奋的新问题,但Android中只有很多IPC选项,而远程服务提供的选项很难用其他IPC选项实现。

答案 1 :(得分:0)

  1. 是的,除非首先启动服务,否则从服务中解除绑定会破坏服务。因此,如果您启动该服务然后绑定到该服务,它将在您的活动重新生成后继续存在(确保您使用stopSelf()在某个时刻停止服务。the docs中提到了绑定服务。< / p>

  2. 不确定他们的问题是什么,是的,该服务实际上是一个单身人士。他们可能会遇到服务与活动紧密耦合的问题,但服务不必了解活动,您也可以使用(本地)广播管理员发回数据并在活动中为其注册接收器