Android进程间通讯之messenger

北风网AD
平时一说进程间通讯,大家都会想到AIDL ,其实messenger AIDL 作用一样,都可以进行进程间通讯。它是基于消息的进程间通信,就像子线程和UI 线程发送消息那样,是不是很简单,还不用去写AIDL 文件,是不是有点小爽。哈哈。
此外,还支持记录客户端对象的Messenger ,然后可以实现一对多的通信;甚至作为一个转接处,任意两个进程都能通过服务端进行通信。




www.kmhxrl.com  AIDL  比较:
  当您需要执行 IPC  时,为您的接口使用 Messenger  要比使用 AIDL  实现更加简单,因为 Messenger  会将所有服务调用排入队列,而纯粹的 AIDL  接口会同时向服务发送多个请求,服务随后必须应对多线程处理。
  对于大多数应用,服务不需要执行多线程处理,因此使用 Messenger  可让服务一次处理一个调用。如果您的服务必须执行多线程处理,则应使用 AIDL  来定义接口。
接下来看下怎么写:
服务端:
1. 创建一个handler 对象,并实现hanlemessage 方法,用于接收来自客户端的消息,并作处理
2. 创建一个messenger( 送信人), 封装handlerwww.kmhx120.com
3.messenger 创建一个IBinder 对象,通过onBind 返回给客户端




www.kmhxrl.com客户端:
1. activity 中绑定服务
2. 创建ServiceConnection 并在其中使用IBinder   Messenger 实例化
3. 使用Messenger 向服务端发送消息
4. 解绑服务www.kmhxnk.com
5. 服务端中在 handleMessage() 方法中接收每个 Message
这样,客户端并没有调用服务的“方法”。而客户端传递的“消息”(Message  对象)是服务在其 Handler  中接收的。
上面实现的仅仅是单向通信,即客户端给服务端发送消息,如果我需要服务端给客户端发送消息又该怎样做呢?
其实,这也是很容易实现的,下面就让我们接着上面的步骤来实现双向通信吧
1. 在客户端中创建一个Handler 对象,用于处理服务端发过来的消息
2. 创建一个客户端自己的messenger 对象,并封装handler
3. 将客户端的Messenger 对象赋给待发送的Message 对象的replyTo 字段
4. 在服务端的Handler 处理Message 时将客户端的Messenger 解析出来,并使用客户端的Messenger 对象给客户端发送消息
这样就实现了客户端和www.myfengxiang.com服务端的双向通信了。
注意:注:Service在声明时必须对外开放,即android:exported="true"另外,我在开发完APP都会用一些APP在线自动化测试工具进行测试:www.nanshanpipes.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值