任何人都可以解释android中绑定和绑定服务之间的区别

时间:2014-08-11 09:43:44

标签: android android-service

任何人都可以解释android中未绑定和绑定服务之间的区别,并解释有关意向服务

由于

4 个答案:

答案 0 :(得分:58)

<强> Bound Service

  

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

     

当最后一个客户端从服务解除绑定时,系统会破坏该服务   service EXCEPT 如果服务是由启动的   startService

未约束服务或已启动

  

服务在应用程序组件启动时,例如   activity,通过调用startService()启动它。一旦启动,服务   可以无限期地在后台运行,即使是那个组件   开始它被摧毁。

<强> BUT

关于Service类的大多数混淆实际上都围绕着它不是:

  

服务不是一个单独的过程。 Service对象本身就是   并不意味着它在自己的过程中运行;除非另有   指定,它在与它所属的应用程序相同的进程中运行   的。

     

服务不是线程。它本身并不是一种手段   主线程(以避免应用程序无响应错误)。

这就是使用 IntentService 的地方。

IntentService 是使用工作线程的服务的子类

  

处理所有启动异步请求(表示为Intents)   需求,一次一个。客户端通过发送请求   startService(Intent)调用;服务根据需要启动,处理   每个Intent依次使用一个工作线程,并在它停止时自行停止   失业了。

Example

希望它有所帮助:)

答案 1 :(得分:11)

有界服务受限于绑定它的活动,并且只有在有限活动存活之后才能工作。  即使在活动被破坏之后,无限制的服务也将一直有效。 表格中的差异在下面的链接中给出,这对面试非常有用 http://infobloggall.com/2014/04/15/bounded-service-in-android/

答案 2 :(得分:6)

  1. 组件(如活动)调用startService()方法时启动未绑定服务 As当一个服务被绑定时,另一个组件(例如客户端)调用bindService()方法。

  2. Unbound服务可以通过调用stopSelf()方法来自行停止。 Where As Bound服务在所有客户解除绑定服务之前无法停止。

  3. Unbound服务无限期地在后台运行。 Where The Bound服务无法在后台无限期运行。

  4. stopService()方法停止了Unbound服务。 如果在绑定服务中,客户端可以通过调用unbindService()方法解除绑定服务。

  5. 由于

答案 3 :(得分:3)

绑定和未绑定服务不是硬币的两面

服务可以是绑定的或未绑定的(已启动的)或两者兼而有之。这只是您为Service类的回调方法提供的实现问题。查看所有四种回调方法here

但是为了分化,你去

1。盯着服务

通过调用startService()方法启动未绑定服务 绑定服务是通过调用bindService()方法启动的 但是在两次调用系统调用onStartCommand()方法内部

2。服务的生命周期

启动unboundService后,它会无限期运行,直到

只要服务绑定到客户端,BoundService就会运行。当没有与服务绑定的活动客户端时,系统会破坏服务

3。 onBind()方法

在编写服务时,您必须覆盖onBind()。如果
未绑定的服务然后返回null
然后BoundService返回IBinder对象。

  

虽然未绑定的服务不会返回Ibinder对象,但这并不意味着它无法与应用程序组件交互。   有很多方法可以做到这一点,例如BroadCastReceiverResultReceiver

单向与服务的双向通信

如果您希望与服务进行双向通信,则应将服务与活动绑定 例如。在暂停播放音乐,播放选项(Activtiy&lt; - &gt; Service)。

当您希望服务更新您的活动(服​​务 - &gt;活动)时,请使用未绑定或已启动的服务。
例如:定时服务每秒更新一次活动。

  

另一个例子

您已经编写了一些处理位置更改的服务 如果您想在移动10米时更新活动(使用未绑定服务) 如果要在活动中单击某个按钮时查看当前位置的坐标。 (使用绑定服务)。