关于Android中aidl的关键词in,out,inout的探索
来源:互联网 发布:北京学唱歌 知乎 编辑:程序博客网 时间:2024/06/10 22:10
第一问:aidl是啥
aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口
Aidl在安卓进程间通讯(IPC)的常用手段,因为其可以并行通讯而相对于用Messager(Handler)进行串行通讯要适应需求。
基本原理步骤是
服务端:
1、创建Service的aidl,在接口中构造几个方法用于来暴露给客户端进行调用。
注意:这里的数据类型只能是:
①java的基本数据类型;
②其他aidl接口,必须import;
③string和charsequence;
④实现了Paracelable接口的自定义实体类,其实体类中需要添加一个Creator<类名> XXX = new Creator<类名>的变量。,然后还需要创建其对应的xxx.aidl文件,包含一句话:parcelable xxx;
⑤list或者map,它们可以不用import,但是其中允许的数据必须是上面的①③④类型,而且如果是④要有import;
⑥需要注意的是上面的数据类型中出了①和③,其他的都必须要有in out inout这种关键词。这些关键词下面再详细解释。
2、创建service,其中需要构造一个实现了上面aidl生成的.java类的.Stub服务桩类(stub是aidl的具体实现。aidl安卓接口定义语言,主要是实现进程间通信,stub在服务端实现接口的功能,另外在客户端是proxy与之通信),其中实现了之前我们在第一步中接口内构造的几个方法,在这里我们对这些数据进行一些处理,然后设定返回值。之后在onbind中返回这个服务桩类!
客户端:
1、将上面第一步构造的aidl文件(所有)和用到的实体类复制到客户端目录下,然后通过bindService方式用intent启动service(注意这里5.0之后需要给Intent setAction和setPackage才可以)。
2、然后在ServiceConnection中通过xxx类(aidl生成的).Stub.asInterface()方法传入onServiceConnected的IBinder参数就可以拿到这个Service。
3、之后就可以调用这个aidl接口中的方法向服务端发送数据给他处理,然后获取一些返回值。
好了,接下来讲讲in out inout的区别
这个关键词主要是用来控制数据流向的,这里的流向,请注意和返回值无关!!!返回值一点也不会受影响!
in:
表示这个传入的对象A a只能由客户端传入服务端,其本身作为方法的参数,不会有任何改变!
out:
表示这个传入的对象无法由客户端流入服务端,就是说服务端无法接收到这个消息,但是这个对象会因为服务端对其赋值等改变而改变,就是说有方法P(),P(a)不会导致服务器接收到这个数据,但是服务器如果对这个a进行操作,那么客户端的这个P方法中的a也会随之改变!
inout:
结合上面两个的理解,可以知道是既可以由客户端传入服务端,又会因为服务端对这个对象进行的操作处理而使得客户端的对象a发生改变。
- 关于Android中aidl的关键词in,out,inout的探索
- 关于aidl参数方向in,out,inout网上的解释
- AIDL中in,out和inout的区别
- AIDL的 in,out,inout指向
- android AIDL : 你真的理解AIDL中的in,out,inout么?
- [Android]AIDL中的in,out,inout理解
- Android AIDL之in out inout
- Android AIDL中的in,out,inout含义
- 你真的理解AIDL中的in,out,inout么?
- 你真的理解AIDL中的in,out,inout么?
- 你真的理解AIDL中的in,out,inout么?
- 你真的理解AIDL中的in,out,inout么?
- AIDL基本使用3—-in out inout的用
- 你真的理解AIDL中的in,out,inout么?
- 探索AIDL定向tag in out inout原理
- AIDL中的in,out,inout
- AIDL中的in,out,inout
- 关于AIDL中的in、out和inout修饰符
- Docker常用容器的使用
- FPFH粗配准
- 【POJ】2431-Expedition 优先队列+贪心
- Spring boot中使用springfox来生成Swagger Specification小结
- linux查端口占用
- 关于Android中aidl的关键词in,out,inout的探索
- jsp特殊符号集
- 编译mongo driver
- Spring中使用JDBC连接数据库的配置
- 省市县三级联动AJAX实现(附MySQL数据)
- java 语言 基础 总结【2】- 写在编程之前
- jq:prop()、attr()、data()异同
- C# 获取文件名和扩展名
- redis 与 spring整合 hash 增删改操作 list增删改操作