您的位置:首页 > 移动开发 > Android开发

Android AIDL使用

2018-03-01 21:20 127 查看
1.Interface name must be unique

AS中创建AIDL文件的时候会报与.java文件名冲突。解决方法是先创建AIDL文件,后创建JAVA文件。

2.AIDL 支持下列数据类型:

Java 编程语言中的所有原语类型(如 int、long、char、boolean 等等)

String

CharSequence

List 中的所有元素都必须是以上列表中支持的数据类型、其他 AIDL 生成的接口或您声明的可打包类型。 可选择将 List 用作“通用”类(例如,List)。另一端实际接收的具体类始终是 ArrayList,但生成的方法使用的是 List 接口。

Map 中的所有元素都必须是以上列表中支持的数据类型、其他 AIDL 生成的接口或您声明的可打包类型。 不支持通用 Map(如 Map

void setFruit(in Fruit);
void setFruit(out Fruit);
void setFruit(inout Fruit);

注意:应该将方向限定为真正需要的方向,因为编组参数的开销极大。


非原参对象实现Procelable接口时要需要新建一个实体.aidl

package ***

procelable Fruit;


3.什么情况下使用AIDL

只有允许不同应用的客户端用 IPC 方式访问服务,并且想要在服务中处理多线程时,才有必要使用 AIDL。 如果不需要执行跨越不同应用的并发 IPC,就应该通过实现一个 Binder 创建接口;或者,如果想执行 IPC,但根本不需要处理多线程,则使用 Messenger 类来实现接口。

4.java.lang.SecurityException: Binder invocation to an incorrect interface报错问题

是由于服务端工程AIDL包名与服务端工程中AIDL包名不一致引起的问题。

5.报Error:(259, 42) 错误: 找不到符号

是由于将java实体文件放在了AIDL文件夹中导致在AIDL接口方法中找不到类,需要在build.gradle中声明:

sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/aidl']
}
}


以上作用是查找java文件的时候也在aidl包下查找。

6. in,out,inout

非原语参数配置in,out,inout

in:数值通过aidl能够传入,并且在service中操作后传回来。

out:数值不能传入,但是能从service中传回来。

inout:数值能够传入传出

demo下载地址:http://download.csdn.net/download/whatfizzer/10265639

https://developer.android.com/guide/components/aidl.html#CreateAidl
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  aidl android idl 跨进程