AIDL的实现和注意点

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


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


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

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


AIDL的实现和注意点_第1张图片
接口定义

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


AIDL的实现和注意点_第2张图片
自定义数据类的aidl


AIDL的实现和注意点_第3张图片
自定义数据类实现Parelable


AIDL的实现和注意点_第4张图片
返回自定义类的接口,记得import

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


AIDL的实现和注意点_第5张图片
该工程为依赖工程


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

1、客户端要定义ServiceConnection

public ISystemManager mISystemManager;//aidl接口

AIDL的实现和注意点_第6张图片
ServiceConnection

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

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

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

AIDL的实现和注意点_第7张图片
调用用aidl接口

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

@Override

publicIBinder onBind(Intentintent) {

mISystemManagerService=this;

returnnewISystemManagerStub();

}


AIDL的实现和注意点_第8张图片
继承aidl接口的stub

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

三:AIDL监听器的实现

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

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

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

AIDL的实现和注意点_第9张图片
监听器aidl接口
AIDL的实现和注意点_第10张图片
监听器aidl类在其他aidl类中,做入参操作

服务端有监听器实现:

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

AIDL的实现和注意点_第11张图片
服务端传递参数


客户端监听器实现

AIDL的实现和注意点_第12张图片
客户端监听器的实现

注意点:

下面是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语句声明。

你可能感兴趣的:(AIDL的实现和注意点)