Android知识Android开发Android技术知识

AIDL的实现和注意点

2016-10-24  本文已影响286人  cookie123

AIDL的目的是:可以将业务型应用的功能通过aidl的方式开放给其他应用实现,比如支付宝的支付功能,给淘宝用。

一:根据需求,生成一个aidl接口的jar包,生成jar包,为了避免需求方和公司定义的aidl不统一,而且只要维护这个jar包就行了

1,创建一个android工程,定义aidl工程

2,aidl接口定义,必须在xx.xx.xx.aidl的package下面

接口定义

3,如果返回值有自定义类型的,自定义数据类也要放在xx.xx.xx.aidl的package下面,并且要定义一个自定义类型接口的aidl,同时自定义数据类型要实现Parcelable。另外返回自定义数据类的接口,记得import该数据类。

自定义数据类的aidl 自定义数据类实现Parelable 返回自定义类的接口,记得import

4、生成jar包,将改android工程勾上 is library 变成依赖工程,然后让其他工程依赖他,编译被依赖工程的时候就会在该依赖工程的bin下面生成可用的jar包,然后给客户端和服务端的aidl工程使用;

该工程为依赖工程

二:aidl客户端和服务端的实现

1、客户端要定义ServiceConnection

public ISystemManager mISystemManager;//aidl接口

ServiceConnection

2、然后通过bingdService连接上上去

context.bindService(explicitIntent,serviceConn, Context.BIND_AUTO_CREATE);

3,客户端调用aidl接口,具体功能,服务端实现

调用用aidl接口

服务端定义一个setvice,onBind返回实现接口stub的类

@Override

publicIBinder onBind(Intentintent) {

mISystemManagerService=this;

returnnewISystemManagerStub();

}

继承aidl接口的stub

到此客户端调用接口,服务端这边实现接口的流程就结束了。

三:AIDL监听器的实现

有的时候,aidl接口中还有一些监听器,比如卸载的回调等,思路是客户端实现监听aidl的stub,服务端传递参数回调回去。

监听器aidl的定义和在其他aidl接口中的位置:

定义监听器aidl接口和普通的aidl接口一样

监听器aidl接口 监听器aidl类在其他aidl类中,做入参操作

服务端有监听器实现:

获取到客户端传来的监听器对象,然后调用监听aidl的接口方法,将值传递回去

服务端传递参数

客户端监听器实现

客户端监听器的实现

注意点:

下面是AIDL能支持的数据类型:入参和出参;

Java编程语言的主要类型(int, boolean等)—不需要import语句。

以下的类(不需要import语句):

String

List-列表中的所有元素必须是在此列出的类型,包括其他AIDL生成的接口和可打包类型。List可以像一般的类(例如List)那样使用,另一边接收的具体类一般是一个ArrayList,这些方法会使用List接口。

Map- Map中的所有元素必须是在此列出的类型,包括其他AIDL生成的接口和可打包类型。一般的maps(例如Map)不被支持,另一边接收的具体类一般是一个HashMap,这些方法会使用Map接口。

CharSequence-该类是被TextView和其他控件对象使用的字符序列。

通常引引用方式传递的其他AIDL生成的接口,必须要import语句声明

实现了Parcelable protocol以及按值传递的自定义类,必须要import语句声明。

上一篇 下一篇

猜你喜欢

热点阅读