在Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢? 显然, Java中是不支持跨进程内存共享的。因此要传递对象, 需要把对象解析成操作系统能够理解的数据格式, 以达到跨界对象访问的目的。在JavaEE中,采用RMI通过序列化传递对象。在Android中, 则采用AIDL(Android Interface Definition Language:接口描述语言)方式实现。
AIDL是一种接口定义语言,用于约束两个进程间的通讯规则,供编译器生成代码,实现Android设备上的两个进程间通信(IPC)。AIDL的IPC机制和EJB所采用的CORBA很类似,进程之间的通信信息,首先会被转换成AIDL协议消息,然后发送给对方,对方收到AIDL协议消息后再转换成相应的对象。由于进程之间的通信信息需要双向转换,所以android采用代理类在背后实现了信息的双向转换,代理类由android编译器生成,对开发人员来说是透明的。
在哪些场合需要用到两个需要用到aidl呢,一个典型的例子就是android 的音乐播放器,但是android的音乐播放器的程序并没有把两个应用之间的通信体现的很明显,假设我们需要在其他的应用中操作正在播放的音乐,虽然我们可以用SERVICECMD来给音乐播放器发送广播,但是这些命令和音乐播放器互动的程度有限,只能播放,停止,上下一曲等,假设我需要在第二个应用中获取当前的播放进度,歌曲名字等,该怎么办呢,这个时候aidl就派上用场了,下边通过一个简单的例子来说明两个应用之间怎么使用aidl来通信。
假设A应用需要与B应用进行通信,调用B应用中的download(String path)方