概述
一、Aidl默认支持的参数类型
AIDL文件支持的数据类型:
①java基本类型(byte、boolean、char、short、int、float、long、double)
②String和CharSequence;
③List:只支持ArrayList,里面每个元素都必须能够被AIDL支持;
④Map:只支持HashMap,里面的每个元素都必须被AIDL支持,包括key和value;
⑤Parcelable:所有实现了Parcelable接口的对象;
⑥AIDL:所有的AIDL接口本身也可以在AIDL文件中使用;
注:
AIDL中除了基本数据类型,其他类型的参数必须标上方向:in、out或者inout;
in:纯粹的输入参,这意味着是从客户端到服务器的数据;
out:参数是纯粹的输出,这意味它的数据是通过服务器到客户端的;
inout:参数是输入也是输出,客户端的值在服务器可能会被修改;
二、AIDL自定义类型参数
1、自定义类型必须实现Parcelable接口,并且实现Parcelable接口的public void writeToParcel(Parcel dest, int flags)方法 。
2、自定义类型中必须含有一个名称为CREATOR的静态成员,该成员对象要求实现Parcelable.Creator接口及其方法。
3、 创建一个aidl文件声明你的自定义类型。
Parcelable接口的作用:实现了Parcelable接口的实例可以将自身的状态信息(状态信息通常指的是各成员变量的值)写入Parcel,也可以从Parcel中恢复其状态。 Parcel用来完成数据的序列化传递。
三、aidl中onway、in、out、inout关键字
1、oneway关键字
正常情况下Client调用AIDL接口方法时会阻塞,直到Server进程中该方法被执行完。oneway可以修饰AIDL文件里的方法,oneway修饰的方法在用户请求相应功能时不需要等待响应可直接调用返回,非阻塞效果,该关键字可以用来声明接口或者声明方法,如果接口声明中用到了oneway关键字,则该接口声明的所有方法都采用oneway方式。(注意,如果client和Server在同一进程中,oneway修饰的方法还是会阻塞),oneway只能针对某一个接口,不能直接定义方法。 方法必须是void类型的返回值类型
2、in关键字
非基本数据类型和string的参数类型必须加参数修饰符,in的意思是只输入,既最终server端执行完后不会影响到参数对象
3、out关键字
与in相反,out修饰的参数只能由server写入并传递到client,而client传入的值并不会传递到server,使用out修饰,如果参数是自定义了类型,必须实现parcelable接口,并且实现public void readFromParcel(Parcel in)方法
4、inout关键字
被inout修饰的参数,既可以从client传递到server,也可以server传递到client,使用out修饰,如果参数是自定义了类型,必须实现Parcelable接口,并且实现public void readFromParcel(Parcel in)方法
如果aidl中使用了自定义类型,必须实现Parcelable接口,并新建一个和自定义类型名相同的aidl,内容就是parcelable 接口名称
最后
以上就是健壮长颈鹿为你收集整理的AIDL默认支持参数类型、自定义类型参数、onway in out inout关键字说明的全部内容,希望文章能够帮你解决AIDL默认支持参数类型、自定义类型参数、onway in out inout关键字说明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复