简述使用Messenger进行进程间的通信

   使用Messenger进行通信:

1.创建服务,并配置好过滤信息。

2.创建服务信使和绑定功能:

   创建服务信使Messenger。信使具有发送(send)客户端信息的功能,内部是把消息发给信使自己的回调接口(信使只负责收信发信,不参与处理),回调接口是在服务边自己完成内部实现的,具体的实现是在自己的handlMessage里获得自己send发送出去的客户端信息,然后可以对该信息(里面包含了来自客户端封装的客户端信使,获取方式为:信息.replyTo)进行处理,同时创建服务端要发送给客户端的信息Message,然后使用客户端的信使replyTo来发送该信息,客户端的信使就会把消息发送给客户端的回调接口里。

   然后把已经封装好上述功能的信使封装到IBinder里(Messenger.getBinder),并在onBind里返回给客户端;

3.绑定服务和创建客户端信使:

   创建指定包名称和过滤信息的Intent来绑定服务;创建ServiceConnection,在里面获得服务返回的IBinder对象,然后从里面取出服务的信使;创建自己的信使Messenger,在里面创建要发送给服务的信息Message,并把信使封装到信息里(把信使赋值给信息的replyTo),然后使用ServiceConnection里获得的服务的信使来发送信息,触发服务端的回调接口。


信息Message在多进程中有5个比较重要的参数,(int)what,客户端的message的what一般用来指定请求服务的哪些服务,服务的message的what一般用来指定自己的身份;arg1,arg2用来附带信息;Bundle,用来附加各种类和信息,用setData为massage注入Bundle,用getData从massage读出Bundle,然后其他Bundle操作通用;replyTo,附带massage的Messenger。信息的创建使用Message.obtain()方法,它有多个重载方法。


信使的创建:创建一个信使需要传递一个回调接口handler给它,在回调接口里实现具体的方法handleMessage(Message);或者使用一个IBinder对象来创建它,因为IBinder对象里封装着Messenger。


整体看上去,有点像双向异步消息的味道。客户端请求绑定服务,服务返回信使,客户端使用服务的信使发送自己的信息和信使给服务,触发服务的回调接口,然后服务获得客户端信息,完成一次请求;服务从客户端的信息里取出客户端的信使,使用该信使发送自己要回馈的信息,然后触发客户端的回调接口,完成一次响应。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值