当前位置: 首页 > news >正文

android-aidl5

aidl类是实现Manager和Service通信的桥梁。

例如在修改Android Wifi功能的时候看到WifiManager管理WifiService;

AIDL是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。

比如onclick(),用oneway修饰,异步调用,监听屏幕点击,点击后各种处理后,才会回调到。

aidl的回调可以使用这种:

void registerVolumeCallback(in IBinder binder);

这里的binder则是客户端在自己程序里面实现接口。如

private final ICarVolumeCallback mVolumeChangeCallback = new ICarVolumeCallback.Stub() {

本身aild的实现就是一个binder,所以可以传递进去,然后服务器里面去回调binder.xxx函数。客户端去实现这个接口的一些函数。

注意:in、out、inout,是接收发送对象的所有数据,

aidl中onway、in、out、inout关键字
1. oneway可以修饰AIDL文件里的方法,oneway修饰的方法在用户请求相应功能时不需要等待响  应可直接调用返回,非阻塞效果,该关键字可以用来声明接口或者声明方法,如果接口声明中用到了oneway关键字,则该接口声明的所有方法都采用oneway方式。

oneway代表这个Binder接口是异步调用;

oneway void request();//异步执行

同一个binder服务中的oneway方法被多次调用会排队执行;

不同binder服务中的oneway方法被同时调用会同时执行;

tips: 一次Binder通信最大可以传输多大的数据为1M-8K;

binder驱动对于oneway的调用是类似于handler sendmessage那样的,挨个处理,所以如果服务端的oneway接口处理太慢而客户端调用太多的话,来不及处理的调用会占满binder驱动的缓存,导致其他调用抛出transaction failed ;

2. in 由cilent端流向server端,server端可以收到此对象的所有数据,收到之后会重新创建一个新的对象将数据填充进去,因为cilent端和server端是两个不同的对象,所以server端对数据的修改不会影响到client端的对象;

service端对数据的改变不会反馈到client端;

非基本数据类型和string的参数类型必须加参数修饰符, in的意思是只输入;

3. out 是由server端流向client端,server端实际上不接收client传入的数据;在service端自己处理数据后结果返回到client端,client接收service端改变的数据结果;

4. inout 对象可以双向流动,即server端能收到cilent发过来的对象的数据,server端对此对象的操作也能影响到cilent端;
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/fengzhiqi1993/article/details/126536035

http://www.lryc.cn/news/385821.html

相关文章:

  • day01-项目介绍及初始化-登录页
  • 华为开发者大会:全场景智能操作系统HarmonyOS NEXT
  • 深度学习二分类评估详细解析与代码实战
  • c++笔记容器详细介绍
  • CS144 Lab3 TCPSender复盘
  • 建筑可视化中使用云渲染的几大理由
  • Python数据可视化-地图可视化
  • leetcode 动态规划(基础版)单词拆分
  • Ubuntu/Linux调试安装南京来可CAN卡
  • vue2+TS获取到数据后自动叫号写法
  • 28、架构-边界:微服务的粒度
  • 开源API网关-ApacheShenYu首次按照启动遇到的问题
  • uniapp获取证书秘钥、Android App备案获取公钥、签名MD5值
  • QT 如何储存多种数据类型(QVariant )
  • 持续总结中!2024年面试必问的操作系统面试题(九)
  • 操作系统入门 -- 文件管理
  • 由浅入深,走进深度学习(2)
  • 【Python Tips】创建自己的函数包并安装进Anaconda,像引入标准包一样直接import导入
  • 【Python机器学习实战】 | 基于支持向量机(Support Vector Machine, SVM)进行分类和回归任务分析
  • 备份和还原
  • Java数组的初始化方法
  • 通过分离有色和无色pdf页面减少打印费
  • c语言--指针
  • python-九九乘法表(对齐式1)
  • thinkphp单独为某个接口设置缓存
  • OpenCV视觉--视频人脸微笑检测(超详细,附带检测资源)
  • docker 搭建 AI大数据模型 --- 使用GPU
  • 面向对象, 常用类, 集合, 异常, JDBC, mysql数据库 复习
  • js取数组最大值之Math.max、Math.max.apply
  • 各种中间件的安装