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 ;

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

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

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

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

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


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/fengzhiqi1993/article/details/126536035

相关推荐
zhangphil25 分钟前
Android简洁缩放Matrix实现图像马赛克,Kotlin
android·kotlin
m0_5127446425 分钟前
极客大挑战2024-web-wp(详细)
android·前端
lw向北.42 分钟前
Qt For Android之环境搭建(Qt 5.12.11 Qt下载SDK的处理方案)
android·开发语言·qt
不爱学习的啊Biao1 小时前
【13】MySQL如何选择合适的索引?
android·数据库·mysql
Clockwiseee1 小时前
PHP伪协议总结
android·开发语言·php
mmsx8 小时前
android sqlite 数据库简单封装示例(java)
android·java·数据库
众拾达人11 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
吃着火锅x唱着歌12 小时前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
_Shirley13 小时前
鸿蒙设置app更新跳转华为市场
android·华为·kotlin·harmonyos·鸿蒙
hedalei15 小时前
RK3576 Android14编译OTA包提示java.lang.UnsupportedClassVersionError问题
android·android14·rk3576