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();
    }
}

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

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

在这里插入图片描述

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

Messenger serviceMsg = null;
serviceMsg = new Messenger(service);

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

在这里插入图片描述

用法replyTo,Messenger类型。

在这里插入图片描述

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

Messenger client = new Messenger(mMyHandle);
Message msgToServer = Message.obtain();
msgToServer.replyTo = client;

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

在这里插入图片描述

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

在这里插入图片描述

服务端发送消息给客户端

在这里插入图片描述

完毕。

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

其实底层是AIDL实现的。

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

在这里插入图片描述

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

在这里插入图片描述

利用handler来构造对象

在这里插入图片描述

跟进getIMessenger();方法

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值