1 AIDL 什么时候使用?

AIDL是Android中IPC(Inter-Process Communication)方式中的一种,AIDL是Android Interface definition language的缩写。

作为进程间通信的重要方式之一?什么时候需要用到呢?

场景1 现在你的应用需要强制保活,产品经理要求做进程保活,在应用中多开一个进程,用来与主进程进行心跳监听,如果有一个进程挂掉,另外一个进程将它拉起。这种需求常用于定制性设备的主应用。

场景2 要求两个应用间可以进行数据传递。应用1跟应用2是两个公司开发的,但是应用1需要对应用2进行命令下发,数据下发。或者同事应用2也需要对应用1进行数据下发。

 

2 该如何使用

aidl一般数据发送方被称为服务端,接受端称为客户端。拿场景2来说,如果现在是两个应用需要双方数据通信,接受方收到数据数据后将会给服务端一个接受成功的回调。两个应用即是客户端又是服务端。

A 第一步在应用中创建aidl文件夹,目录如下

android aidl 配置完整 android的aidl_android

在aidl文件夹中再建立一个文件夹,存放aidl相关文件。

现在举个应用间传递对象格式,和字符串的例子

B 在aidl文件夹中创建需要的类

android aidl 配置完整 android的aidl_服务端_02

 

方法1.2分别是两个提供数据传递的方法,参数就是数据类型

传递对象的时候我们看到参数名前有个in 的修饰词,我们看下图,bean对象的创建比正常的复杂一些,首先要创建一个正常的java类对象继承Parcelable,第二步在创建aidl格式的bean对象,内部很简单,只有parcelable ProgrammeBean,parcelable 修饰的类名即可。



3.4方法就是aidl使用回调时都需要使用的方法,一个注册回调一个注销回调,我们再看下回调方法内部

android aidl 配置完整 android的aidl_服务端_03

C 在逻辑代码中使用aidl

第一步创建一个service

android aidl 配置完整 android的aidl_android_04

service中的具体实现在Mystub类中看

android aidl 配置完整 android的aidl_数据_05

集成我们写的aidl的stub,实现内部的方法,红框内的就是回调相关的注册,注销,以及接受到其他应用的数据后的回调方法的调用。对方发过来的数据都是在这个类中去获取。

接下来 我们需要在页面中去绑定交互方的服务,调用bindservice,写明action,对方包名


bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);


android aidl 配置完整 android的aidl_android_06

这个就是监听于交互端的绑定状态。

然后如果去下发数据对交互方就只需要调用

android aidl 配置完整 android的aidl_android_07

总结:使用的大致流程就是这些了,是不是很简单。