
前言
我们都知道,在Android中,进程之间的数据是相互隔绝的。于是进程间通行就需要通过IPC(统进程间通信)的方式进行。而Binder就是在Android中IPC的一种方式,关于Binder机制实现的底层原理,因为过于复杂在这就不再表述。下面主要讲解下在Android中通过AIDL实现进程间通信的过程。
概述
在开发项目中,有时候我们会因为内存或者其他一些原因的考虑,把Activity或者服务设置在不同的进程里面,这时候如果我们使用一些事件分发,因为进程的不同,有些地方就接收不到消息。这时候我们会考虑能否先通过IPC先分发至不同的进程,然后再在各自进程中进行分发处理呢。下面我们通过项目来实现及了解AIDL的使用。
GitHub
相关代码请点这里
AIDL开发
AIDL创建
首先我们通过"右击 》 New 》 AIDL 》 AIDL File进行创建aidl文件,创建完成后main文件目录下生成一个aidl的文件夹,并在文件夹下面生成与项目相同包名目录,新创建的aidl文件就在其中。

自定义类型创建
在ALDL中,支持的数据类型有如下几种:
byte、char、short、int、long、float、double、boolean、String,CharSequence
List、Map(lsit和map内的类型必须是支aidl的类型)
如果需要支持自定义类型就需要自定义创建。 首先我们在java目录下创建一个.java文件。然后继承Parcelable接口。 建议先进行参数设置,然后通过implement methods添加相关方法实现。

然后在aidl文件目录下相同包名下创建同名.aidl文件。 ps:注意一定要包名相同,文件名相同。


完成后我们自定义类型就可以在AIDL中进行使用了。
引用
自定义类型引用及aidl接口编写。

在这里要注意的有几点:
- 因为是aidl文件,所以包名的import要手动编写。
- 文件中设置的接口方法就是之后aidl使用时候可以调用的方法。
- in、out、inout是aidl中的定向tag,表示在使用时参数对象的数据流动方式。
编译
当完成上述文件创建后,我们可以通过菜单栏》Build 》Make Project进行编译,编译成功后会在项目下build>generated>aidl>debug>包名路径下生成同名文件。

调用
然后我们就可以在service中进行调用了。

AIDL使用
#####多进程设置 创建两个Activity配置成不同进程




在Activity连接AIDL服务
- 通过bindService()方法进行服务绑定。
- 在ServiceConnection回调中获取IBinder。
- 通过IBinder获取ITermiteAidlInterface接口代理并设置回调

AIDL数据发送测试
在TwoActivity中通过sendEventMessage()方法发送对象



至此,AIDL的使用及进程间事件分发基础逻辑已实现。