Android Messenger使用

在android IPC中有介绍到一个可以跨进程的通信方法Messenger,翻译为信使,这很贴切它就是扮演这个角色用的,可以在不同的进程间传递信息,也就是Message对象。在Message对象中可以放入我们需要传递的数据,Messenger是一种轻量级的IPC方案,它的底层实现的是AIDL,我们可以通过该类的构造方法就明白了,不清楚AIDL的同学可以自行去翻看这类的资料。Messenger通常用在服务端进程和客户端进程通信中,这里服务端是android中常见的Service而客户端可以理解为Activity。
Messenger的使用很简单,由于它一次处理一个请求,因此在服务端我们不需要考虑线程同步问题,这也是因为服务端不存在并发执行的情形。使用Messenger有如下几个步骤分为服务端和客户端:

  • 服务端
    先看服务端:



上图中是一个普通的Service,在其中我们使用Messenger来接受并恢复客户端发来的信息。客户端需要使用bindService方法 来绑定服务。因此在service的onBind方法中需要返回一个IBinder对象,此对象从Messenger中获取。在此我们可以看出Messenger就相当于做桥梁一样负责传输信息。

  • 客户端

客户端很简单,就和普通使用bindService一样,在onServiceConnection的时候向服务器发送一条信息,并且由于这里设置了服务端会恢复给客户端因此,在message.replyTo=replay;方法 将传过去的信息告诉服务端用什么来回复我。replay对象 是存在于客户端的Messenger对象,在该对象的Handler中我们就可以获取服务端传回来的信息。

到这里可能会说,并没有实现跨进程啊,我想说的是这里我们的Service使用的是在清单文件中指定的process属性。当启动它的时候 我们可以看到后台有两个进程的存在。当然啦 它也能用在同进程的应用中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容