当前位置:   article > 正文

Android系统跨进程通信--Messenger实际客户端,服务端通信测试_android messenger

android messenger

Android系统跨进程通信–Messenger

1.简介

跨进程通信的方式之一,简化AIDL的繁琐,提升开发效率。

2.Messenger用法

服务端我们实现一个Messenger,搞一个handle处理客户端发给服务端的消息,

在这里插入图片描述

@SuppressLint("Registered")
public class MyMessenger extends Service {
    private MyHandle mMyHandle = new MyHandle();
    //mMyHandle构造一个Messenger对象出来,
    private Messenger messenger = new Messenger(mMyHandle);

    private static final String TAG = MyMessenger.class.getSimpleName();

    static class MyHandle extends Handler {
        @Override
        public void handleMessage(@NonNull Message msg) {
            if (msg.what == 1) {
                Log.e(TAG, "handleMessage: qfh");
                Messenger sendMsgFromClient = msg.replyTo;
                //发给客户端的信息
                Message sendToMsgFromService = Message.obtain();
                sendToMsgFromService.what = 3333;
                try {
                    //发送消息
                    sendMsgFromClient.send(sendToMsgFromService);
                } catch (Exception e) {
                    
                }
            }
            super.handleMessage(msg);
        }
    }
	//跟客户端通信所返回的IBinder对象
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return messenger.getBinder();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

3.跨进程调用Messenger进行通信

跟aidl是差不多的只不过换成了Messenger

在这里插入图片描述

获取了服务端的IBinder对象后,在客户端要转一下,

Messenger serviceMsg = null;
serviceMsg = new Messenger(service);
  • 1
  • 2

客户端拿到这个对象后,就可以通过它也可以给服务端发送消息,

在这里插入图片描述

用法replyTo,Messenger类型。

在这里插入图片描述

意思就是把client这个Messenger的对象包装在Message中然后打包发送给服务端,

Messenger client = new Messenger(mMyHandle);
Message msgToServer = Message.obtain();
msgToServer.replyTo = client;
  • 1
  • 2
  • 3

在服务端这个就是客户端传递过来的client,是

在这里插入图片描述

测试客户端发送消息给服务端

在这里插入图片描述

服务端发送消息给客户端

在这里插入图片描述

完毕。

4.Messenger对AIDL的原理包装(基于android-10.0.0_r41分析)

其实底层是AIDL实现的。

可以看出是可序列化传递的一个对象

在这里插入图片描述

通过send方法来跨进程发送消息的

在这里插入图片描述

利用handler来构造对象

在这里插入图片描述

跟进getIMessenger();方法

在这里插入图片描述

很明显就是就是AIDL文件,在服务端实现了send方法,最终是调用这里。

在这里插入图片描述

搜索也可以看出它是一个AIDL文件类型的接口。

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/122592
推荐阅读
相关标签
  

闽ICP备14008679号