Android 接口定义语言 (AIDL) 与您可能使用过的其他接口语言 (IDL) 类似.您可以利用它定义客户端与服务均认可的编程接口,以便二者使用进程间通信 (IPC) 进行相互通信.在 Android 中,一个进程通常无法访问另一个进程的内存.因此,为进行通信,进程需将其对象分解成可供操作系统理解的原语,并将其编组为可供您操作的对象.编写执行该编组操作的代码较为繁琐,因此 Android 会使用 AIDL 为您处理此问题.
跨进程通信(IPC)的方式很多,AIDL是其中一种.还有Bundle、文件共享、Messenger、ContentProvider和Socket等进程间通信的方式. AIDL是接口定义语言,只是一个工具,具体通信还是得用Binder来进行.Binder是Android独有的跨进程通信方式,只需要一次拷贝,更快速和安全.
官方推荐我们用Messenger来进行跨进程通信,但是Messenger是以串行的方式来处理客户端发来的消息,如果大量的消息同时发送到服务端,服务端仍然只能一个个处理,如果有大量的并发请求,那么用Messenger就不太合适了.这种情况就得用AIDL了.其实Messenger的底层也是AIDL,只不过系统做了层封装,简化使用.
AIDL支持的数据类型:
而且在AIDL文件中,不是所有数据类型都是可以使用的,支持的数据类型如下:
注意: - 当需要传递对象时,则对象必须实现Parcelable接口 - 所有非原语参数均需要指示数据走向的方向标记.这类标记可以是 in、out 或 inout. - in : 客户端流向服务端 - out : 服务端流向客户端 - inout : 双向流通 - 原语默认是in,这里应该考虑一下是用什么原语标记,因为如果是inout的话开销其实蛮大的.