任何人都可以解释android中未绑定和绑定服务之间的区别,并解释有关意向服务
由于
答案 0 :(得分:58)
<强> Bound Service 强>
当应用程序组件绑定到服务时绑定服务 调用bindService()。绑定服务提供客户端 - 服务器 允许组件与服务交互的接口,发送 请求,获取结果,甚至跨进程使用 进程间通信(IPC)。
当最后一个客户端从服务解除绑定时,系统会破坏该服务 service EXCEPT 如果服务是由启动的 startService
未约束服务或已启动
服务在应用程序组件启动时,例如 activity,通过调用startService()启动它。一旦启动,服务 可以无限期地在后台运行,即使是那个组件 开始它被摧毁。
<强> BUT 强>
关于Service类的大多数混淆实际上都围绕着它不是:
服务不是一个单独的过程。 Service对象本身就是 并不意味着它在自己的过程中运行;除非另有 指定,它在与它所属的应用程序相同的进程中运行 的。
服务不是线程。它本身并不是一种手段 主线程(以避免应用程序无响应错误)。
这就是使用 IntentService 的地方。
IntentService 是使用工作线程的服务的子类
处理所有启动异步请求(表示为Intents) 需求,一次一个。客户端通过发送请求 startService(Intent)调用;服务根据需要启动,处理 每个Intent依次使用一个工作线程,并在它停止时自行停止 失业了。
希望它有所帮助:)
答案 1 :(得分:11)
有界服务受限于绑定它的活动,并且只有在有限活动存活之后才能工作。 即使在活动被破坏之后,无限制的服务也将一直有效。 表格中的差异在下面的链接中给出,这对面试非常有用 http://infobloggall.com/2014/04/15/bounded-service-in-android/
答案 2 :(得分:6)
组件(如活动)调用startService()方法时启动未绑定服务 As当一个服务被绑定时,另一个组件(例如客户端)调用bindService()方法。
Unbound服务可以通过调用stopSelf()方法来自行停止。 Where As Bound服务在所有客户解除绑定服务之前无法停止。
Unbound服务无限期地在后台运行。 Where The Bound服务无法在后台无限期运行。
stopService()方法停止了Unbound服务。 如果在绑定服务中,客户端可以通过调用unbindService()方法解除绑定服务。
由于
答案 3 :(得分:3)
服务可以是绑定的或未绑定的(已启动的)或两者兼而有之。这只是您为Service类的回调方法提供的实现问题。查看所有四种回调方法here
但是为了分化,你去
通过调用startService()
方法启动未绑定服务
绑定服务是通过调用bindService()
方法启动的
但是在两次调用系统调用onStartCommand()方法内部
启动unboundService后,它会无限期运行,直到
只要服务绑定到客户端,BoundService就会运行。当没有与服务绑定的活动客户端时,系统会破坏服务
在编写服务时,您必须覆盖onBind()。如果
未绑定的服务然后返回null
然后BoundService返回IBinder对象。
虽然未绑定的服务不会返回Ibinder对象,但这并不意味着它无法与应用程序组件交互。 有很多方法可以做到这一点,例如BroadCastReceiver或ResultReceiver
如果您希望与服务进行双向通信,则应将服务与活动绑定 例如。在暂停播放音乐,播放选项(Activtiy&lt; - &gt; Service)。
当您希望服务更新您的活动(服务 - &gt;活动)时,请使用未绑定或已启动的服务。
例如:定时服务每秒更新一次活动。
另一个例子
您已经编写了一些处理位置更改的服务 如果您想在移动10米时更新活动(使用未绑定服务) 如果要在活动中单击某个按钮时查看当前位置的坐标。 (使用绑定服务)。