【发布时间】:2014-08-11 09:43:44
【问题描述】:
谁能解释一下android中未绑定和绑定服务的区别并解释一下意图服务
谢谢
【问题讨论】:
谁能解释一下android中未绑定和绑定服务的区别并解释一下意图服务
谢谢
【问题讨论】:
当应用程序组件通过以下方式绑定到服务时,服务被绑定 调用 bindService()。绑定服务提供客户端-服务器 允许组件与服务交互的接口,发送 请求,获得结果,甚至跨进程这样做 进程间通信 (IPC)。
当最后一个客户端与服务解除绑定时,系统会销毁 service EXCEPT 如果服务是由 startService
未绑定服务或已启动
当应用程序组件(例如 活动,通过调用 startService() 启动它。一旦启动,服务 可以无限期地在后台运行,即使组件 开始它就被销毁了。
但是
关于 Service 类的大部分困惑实际上都围绕着它不是什么:
服务不是一个单独的进程。服务对象本身 并不暗示它在自己的进程中运行;除非另有 指定,它与它所属的应用程序在同一进程中运行 的。
服务不是线程。它本身并不是完成工作的手段 主线程(避免 Application Not Responding 错误)。
这就是使用 IntentService 的地方。
IntentService 是 Service 的子类,它使用工作线程来
处理所有启动异步请求(表示为 Intents) 需求,一次一个。客户端通过发送请求 startService(Intent) 调用;服务根据需要启动,处理 每个 Intent 依次使用一个工作线程,并在它发生时自行停止 没有工作了。
希望对你有帮助:)
【讨论】:
绑定服务绑定到绑定它的活动,并且仅在绑定活动处于活动状态时才会工作。 而即使在活动被破坏后,无限制的服务也将一直工作到完成。 下面的链接中给出了表格差异,这对面试非常有用 http://infobloggall.com/2014/04/15/bounded-service-in-android/
【讨论】:
服务可以是绑定的或未绑定的(已启动)或两者兼而有之,这只是您为服务类的回调方法提供的实现问题。查看全部四种回调方法here
但是为了差异化你去吧
Unbound Service 通过调用startService() 方法启动。
绑定服务通过调用bindService()方法启动。
但是在这两个调用中,系统调用内部的onStartCommand() 方法
一旦 unboundService 启动,它就会无限期地运行,直到
BoundService 只要服务绑定到客户端就会运行。当没有活动客户端绑定服务时,系统会销毁该服务
当您编写服务时,您必须重写 onBind()。如果
未绑定服务然后返回 null
BoundService 然后返回 IBinder 对象。
虽然未绑定的服务不返回 Ibinder 对象,但这并不意味着它不能与应用程序组件交互。 有一些方法可以做到这一点,例如 BroadCastReceiver 或 ResultReceiver
当您希望与您的服务进行双向通信时,您应该将您的服务与 Activity 绑定。
例如。使用暂停、播放选项在后台播放音乐(Activtiy 服务)。
当您只想让服务更新您的活动(服务->活动)时,请使用未绑定或已启动的服务。
例如:每秒更新 Activity 的计时器服务。
另一个例子
您编写了一些处理位置变化的服务。
如果您想在移动 10 米时更新您的活动(使用无绑定服务)。
如果您想在单击活动中的某个按钮时查看当前位置的坐标。 (使用绑定服务)。
【讨论】:
组件(如活动)调用 startService() 方法时启动未绑定服务 Where As A 服务在另一个组件(例如客户端)调用 bindService() 方法时被绑定。
Unbound 服务可以通过调用 stopSelf() 方法自行停止。 Where As The Bound 服务在所有客户端解除绑定服务之前无法停止。
Unbound 服务无限期地在后台运行。 Where As The Bound 服务不会无限期地在后台运行。
Unbound 服务被 stopService() 方法停止。 在绑定服务中,客户端可以通过调用 unbindService() 方法解除绑定服务。
谢谢
【讨论】: