Android:绑定服务和启动服务之间的区别

10
我正在尝试确定绑定服务和启动服务之间的主要概念(而非实现)差异。以下是主要要点:
  1. 绑定服务允许扩展的双向通信,而启动服务无需向客户端活动返回任何结果。

  2. 只要至少有一个客户端绑定到绑定服务上,绑定服务将为多个客户端提供服务,而启动服务执行单个操作然后关闭。 (我知道也可以有同时绑定并启动的服务)

    还有其他重大区别吗?

3个回答

13

服务是一种在后台运行的组件,可以执行长时间运行的操作而无需与用户进行交互。例如,当用户在不同的应用程序中时,服务可以在后台播放音乐,或者可以通过网络获取数据而不会阻塞用户与活动的交互。一个服务基本上可以处于两个状态:

已启动:当应用程序组件(如活动)通过调用startService()来启动服务时,服务就会启动。一旦启动,即使启动它的组件被销毁,服务也可以无限期地在后台运行。

已绑定:当应用程序组件通过调用bindService()绑定到服务时,服务就会绑定。绑定服务提供了一个客户端 - 服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至可以通过进程间通信(IPC)跨进程执行。

输入图像描述


5
我已阅读过Android文档,并理解回调函数的工作原理。我的问题旨在了解启动服务和绑定服务之间的概念差异。 - Amit
1
你需要理解哪种类型的差异,例如在绑定服务和启动服务之间的工作? - Rajan Bhavsar
我们需要在已绑定的服务上调用 unbind 方法吗? - IgorGanapolsky

7
以下图片或许对您有所帮助: enter image description here enter image description here enter image description here

1
你应该引用来源。 - logi-kal
1
这个源可能来自Pluralsight教程 - 服务 - Sriyank Siddhartha。 - Devrath
我们需要显式调用 unbind 吗? - IgorGanapolsky

3
主要区别在于当最后一个客户端解除绑定时,捆绑服务将被Android操作系统终止,而启动服务则不需要任何客户端并且它可以运行。正如您已经提到的,您还可以创建一个支持多客户端通信但未绑定的服务。
当您尝试停止它们时,差异也会出现。当您在绑定服务上调用stopService(..)并且它仍有一个客户端绑定它时,什么都不会发生,而另一方面,启动服务将被终止。当您在启动服务上调用unbindService时,什么也不会发生,而如果您的服务已绑定并且这是最后一个客户端,则它将关闭....因此总的来说它们之间唯一的区别就是它们如何开始和最终停止运行。
除此之外,它们之间没有区别。

绑定服务是扩展的双向通信的首选吗? - Amit
@Amit 这要看情况。如果你希望其他应用程序能够与你的服务进行通信,你必须使用 AIDL 来完成这项工作。我也见过有人更喜欢这种方式,但这会使你的服务变得公开,所以除非我希望它是公开的,否则我更喜欢处理程序方式(你所提到的方式)。 - Bojan Kseneman
已启动的服务可能会因为没有明确的原因而被 Android 操作系统终止。 - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接