所以我正在使用本地服务,我想让活动向服务发送一些命令。除了启动和停止之外,我还想为我的服务正在执行的活动执行暂停或重启命令(命令在这里并不重要,只是给它们作为示例。
我认为绑定到服务是正确的方法,但我不确定两件事。
Android文档说从服务解绑会杀死它。如果我希望我的服务在后台运行怎么办...那么当我的Activity onCreate()s我要绑定到服务(控制它/发送命令)和onDestroy()时我想解开绑定来自服务的活动,但保持服务正常运行。
我无法理解关于Android开发的Big Nerd Ranch书中的这段摘录
这种模式看起来令人兴奋。它是Android中唯一的地方 使一个Android组件能够直接与另一个组件通信。我们不 但是推荐它。由于服务是有效的单身人士,使用 他们这种方式与使用单身人士相比没有什么好处 代替。
它是否实质上告诉我bind是一个api,只是让事情变得有点太复杂而无法真正用于本地服务?
答案 0 :(得分:4)
安卓文档说从服务中取消绑定会杀掉它。
更准确地说,当您调用unbindService()
时,如果没有其他未完成的绑定,并且服务上没有任何名为startService()
以使其以这种方式运行,则该服务将被销毁。
如果我希望我的服务在后台运行怎么办...那么当我的Activity onCreate()s我要绑定到服务(控制它/发送它命令)和onDestroy()时我会怎样?喜欢从服务中取消绑定Activity,但保持服务正常运行。
您必须同时使用startService()
(以更好地控制服务的持续时间)和bindService()
。而且,如果您所做的只是发送命令,我就会直接跳过bindService()
并通过startService()
发送命令。
我无法理解关于Android开发的Big Nerd Ranch书中的这段摘录
最后引用的句子是......奇怪的。
它是否实质上告诉我bind是一个api,只是让事情变得有点太复杂而无法真正用于本地服务?
这是对引用段落的合理解释。
就我个人而言,我发现绑定是各种身体部位的痛苦,超过它对当地服务的价值。 服务很重要,作为操作系统的一个指示,您正在进行后台工作,值得让您的流程保持更长时间。但是我将使用命令模式和事件总线而不是本地绑定。绑定本身是状态,需要根据配置更改进行管理。保留的片段比以前更容易,但它仍然在加剧。
绑定模式对于远程服务更为重要,其中客户端和服务位于不同的应用程序中。虽然这引入了许多令人兴奋的新问题,但Android中只有很多IPC选项,而远程服务提供的选项很难用其他IPC选项实现。
答案 1 :(得分:0)
是的,除非首先启动服务,否则从服务中解除绑定会破坏服务。因此,如果您启动该服务然后绑定到该服务,它将在您的活动重新生成后继续存在(确保您使用stopSelf()
在某个时刻停止服务。the docs中提到了绑定服务。< / p>
不确定他们的问题是什么,是的,该服务实际上是一个单身人士。他们可能会遇到服务与活动紧密耦合的问题,但服务不必了解活动,您也可以使用(本地)广播管理员发回数据并在活动中为其注册接收器