一. 创建提供绑定的服务时,您必须提供 IBinder
,用以提供客户端用来与服务进行交互的编程接口。 您可以通过三种方法定义接口:扩展 Binder 类(统一应用中);使用 Messenger(IPC单进程处理请求队列);使用 AIDL(IPC 多进程)
二.扩展Binder的实现:
以下是具体的设置方法:https://developer.android.google.cn/guide/components/bound-services.html
- 在您的服务中,创建一个可满足下列任一要求的
Binder
实例:- 包含客户端可调用的公共方法
- 返回当前
Service
实例,其中包含客户端可调用的公共方法 - 或返回由服务承载的其他类的实例,其中包含客户端可调用的公共方法
- 从
onBind()
回调方法返回此Binder
实例。 - 在客户端中,从
onServiceConnected()
回调方法接收Binder
,并使用提供的方法调用绑定服务。
以下是 Messenger
的使用方法摘要:https://developer.android.google.cn/guide/components/bound-services.html
- 服务实现一个
Handler
,由其接收来自客户端的每个调用的回调 Handler
用于创建Messenger
对象(对Handler
的引用)Messenger
创建一个IBinder
,服务通过onBind()
使其返回客户端- 客户端使用
IBinder
将Messenger
(引用服务的Handler
)实例化,然后使用后者将Message
对象发送给服务 - 服务在其
Handler
中(具体地讲,是在handleMessage()
方法中)接收每个Message
。
四。
注
:通常情况下,
切勿
在 Activity 的
onResume()
和
onPause()
期间绑定和取消绑定,因为每一次生命周期转换都会发生这些回调,您应该使发生在这些转换期间的处理保持在最低水平