ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android Framework实战开发-binder通信常见元素介绍及binder双向通信的实现

2021-10-06 10:59:30  阅读:275  来源: 互联网

标签:调用 双向通信 Framework binder inout out binderDied 服务端 客户端


csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论

android跨进程通信实战视频课程(加群获取优惠)

aidl的一些关键字:

1、oneway介绍

oneway 关键字用于修饰远程调用的行为,被oneway修饰了的方法不可以有返回值,也不可以有带out或inout的参数。
使用oneway时,远程调用不会阻塞;它只是发送事务数据并立即返回。接口的实现最终接收此调用时,是以正常远程调用形式将其作为来自 Binder 线程池的常规调用进行接收。

2、in,out,inout介绍

in、out、inout表示跨进程通信中数据的流向(基本数据类型默认是in,非基本数据类型可以使用其它数据流向out、inout)。

in 表示数据只能由客户端流向服务端。(表现为服务端修改此参数,不会影响客户端的对象)

out 表示数据只能由服务端流向客户端。(表现为服务端收到的参数是空对象,并且服务端修改对象后客户端会同步变动)

inout 则表示数据可在服务端与客户端之间双向流通。(表现为服务端能接收到客户端传来的完整对象,并且服务端修改对象后客户端会同步变动)

3、Binder跨进程双向通信的实现

在这里插入图片描述
这里其实一共只需要分为3步:
1.首先client通过bindService方式获取到了服务端的IServer接口对象,既可以正常调用服务端的接口
2、这里服务端接口是IServer里面有一个setCallback方法,这个方法参数是一个ICallbackClient类型实体接口对象,这个接口对象由客户端进行实现,服务端进行调用
3、服务端在客户端setCallback之后就获取了客户端的ICallbackClient类型的对象,调用改对象的方法就可以与客户端进行通信

4、linktodeath介绍

死亡通知是为了让Bp端(客户端进程)进能知晓Bn端(服务端进程)的生死情况,当Bn端进程死亡后能通知到Bp端。

定义:AppDeathRecipient是继承IBinder::DeathRecipient类,主要需要实现其binderDied()来进行死亡通告。
注册:binder->linkToDeath(AppDeathRecipient)是为了将AppDeathRecipient死亡通知注册到Binder上。
Bp端只需要覆写binderDied()方法,实现一些后尾清除类的工作,则在Bn端死掉后,会回调binderDied()进行相应处理。

 @Override
        public void setCallback(IChangeCallback callback) throws RemoteException {
            mCallBack = callback;
            //监听客户端的进程是否死了
            mCallBack.asBinder().linkToDeath(new DeathRecipient() {
                @Override
                public void binderDied() {
                    Log.i("test","linkToDeath binderDied");
                }
            },0);
        }

标签:调用,双向通信,Framework,binder,inout,out,binderDied,服务端,客户端
来源: https://blog.csdn.net/liaosongmao1/article/details/120622390

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有