Android 中的Messenger

Android 中如何实现进程间双向通信?

在此可以通过 Messenger与Service  来实现Android间进程的双向通信。接下来我们就详细说下。

我们知道,在Android中Service和Service的调用者既可以在同一个APP中,也可以在不同的APP中。如果在不同的APP间,那么这样就可以使用Service来实现进程间通信了。

接下来重点就来了,我们如何使用bindService和Messenger来实现进程间通信(IPC)

使用Service来实现进程间通信的关键就是Messenger和Ibinder和Handler。

接下来谈下如何使用Messenger:

1.Service需要实现一个Handler,用以处理从客户端接收到的消息。

2.使用该Handler来创建一个Messenger对象,Messenger内部对象会引用该Handler对象。

3.使用创建好的Messenger对象获得一个Ibinder实例,并且将该Ibinder通过Service的onBinder方法返回给客户端。

4.客户端通过收到的IBinder对象实例化一个Messenger对象,该Messenger对象内部就指向Service中的Handler。客户端通过该Messenger对象就可以向service中的Handler发送消息了。

5.在Service中的Hanlder收到消息之后,就可以在Handler中的handleMessenge方法中处理消息。

6.以上的4、5步就完成了客户端向Service发送消息并Service接收到消息的单向通信过程,即 客户端 -> Service。如果要实现Service向客户端回消息的通信过程,即Service -> 客户端,那么前提是在客户端也需要Service一样内部维护有一个指向Handler的Messenger。当在第4步中客户端向Service发送消息时,将Message的replyTo属性设置为客户端自己的Messenger。这样在第5步Service在Handler的handleMessage中处理收到的消息时,可以通过Message的Messenger再向客户端发送消息,这样客户端内部维护的Handler对象就会收到来自于Service的Message,从而完成Service向客户端发送消息且客户端接收到消息的通信过程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值