当前位置:   article > 正文

Android进程间通信(三):使用Messenger实现进程间通信_messenger parcelable github

messenger parcelable github

一 Messenger介绍:

关于进程间的通信:

关于Android进程间的通信,在第一篇文章中我们通过传递Parcel对象,利用IBinder完成了进程间的通信,在第二篇文章 中我们通过在客户端创建一个aidl的文件,在服务端实例化由aapt生成的stub类的对象来完成了进程间的通信。今天我们来使用另一种更简洁的方法—Messenger来实现进程间的通信。

进程之间不能共享内存数据, 但是可以进行通信, 除了简单的Intent通信, 也可以使用Messenger, Messenger基于AIDL实现, 顺序执行, 不支持并发. 为了区分通信的始末, 我们暂定发送数据是客户端, 接收数据是服务端. 本文介绍Messenger的使用方式。

Messenger官方介绍:

Messenger–信使,类的继承关系:

public final class Messenger 
extends Object implements Parcelable   //实现了Parcelable接口
  • 1
  • 2

定义:

1 Reference to a Handler,   //一个Messenger关联了一个Handler
2 which others can use to send messages to it. 
3 This allows for the implementation of message-based communication across processes, //基于message的进程间通信
4 by creating a Messenger pointing to a Handler in one process, 
5 and handing that Messenger to another process.
  • 1
  • 2
  • 3
  • 4
  • 5

解释为:Messenger引用了一个Handler对象,以便others能够向它发送消息(使用mMessenger.send(Message msg)方法)。该类允许跨进程间基于Message的通信(即两个进程间可以通过Message进行通信),在服务端使用Handler创建一个Messenger,客户端持有这个Messenger就可以与服务端通信了。

以前我们使用Handler+Message的方式进行通信,都是在同一个进程中,从线程持有一个主线程的Handler对象,并向主线程发送消息。

基于消息的进程间通信方式,如图所示:

这里写图片描述

可以看到,我们可以在客户端发送一个Message给服务端,在服务端的handler中会接收到客户端的消息,然后进行对应的处理,处理完成后,再将结果等数据封装成Message,发送给客户端,客户端的handler中会接收到处理的结果。

二 Handler+Messenger实现进程间的通信,一般使用按如下六个步骤:

(1)创建信使对象:
 远程通过
 serviceMessenger=new Messenger(new ServiceHandler());
 创建一个信使对象
  • 1
  • 2
  • 3
(2)客户端使用bindlerService请求连接远程:
 Intent intent =new Intent(MainActivity.this,MessengerService.class);
        bindService(intent, mConn, Context.BIND_AUTO_CREATE);
  • 1
  • 2
(3) 远程onBind方法返回一个bindler:
 @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.i("TEST","MessengerService-->onBind()");
        return serviceMessenger.getBinder();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
(4) 客户端使用远程返回的bindler得到一个信使(即得到远程信使):
 @Override
        public void onServiceConnected(ComponentName name, IBinder service){
            Log.i(
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/122621
推荐阅读
相关标签
  

闽ICP备14008679号