Android:绑定和启动服务之间的差异

时间:2015-05-23 04:09:02

标签: android service

我正在尝试确定绑定服务和启动服务之间的主要概念(非实现)差异。以下是要点:

  1. 绑定服务允许活动和服务之间的扩展双向通信,而启动的服务不需要将任何结果返回给客户端活动
  2. 绑定服务将为多个客户端提供服务(只要至少有一个客户端绑定到它),而启动的服务执行单个操作然后关闭。 (我知道可以启动也受约束的服务)

    还有其他重大差异吗?

3 个答案:

答案 0 :(得分:7)

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

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

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

enter image description here

答案 1 :(得分:1)

请参阅下面的图片或许对您有所帮助:

enter image description here

enter image description here

enter image description here

答案 2 :(得分:0)

主要区别在于,当最后一个客户端具有未绑定的启动服务但是不需要任何客户端并且它可以运行时,绑定服务将被Android操作系统终止。正如您已经提到的,您还可以创建一个可以支持多客户端通信但不受约束的服务

当你试图阻止它们时也会出现差异。当您在绑定服务上调用stopService(..)并且它仍然绑定了客户端时,不会发生任何事情,而另一方面,启动的服务将被终止。当您在已启动的服务上调用unbindService时,没有任何反应,而如果您的服务受限并且这是最后一个客户端,它将关闭....所以它们之间的唯一区别是它们是如何启动和停止的最终

除此之外,没有区别。