Android AIDL使用

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.youkuaiyun.com/download/whatfizzer/10265639

https://developer.android.com/guide/components/aidl.html#CreateAidl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值