1.Binder的定义和作用

1.1 从Android代码的实现角度来讲,Binder是Android中的一个类,它实现了IBinder接口。

1.2从其模型的结构、组成来说,Binder是一种虚拟的物理设备驱动,在Android的FrameWork层中,他是连接Service进程、Client进程和Service Manager进程的桥梁。

1.3从IPC (Inter-Process Communication)的角度讲,Binder是Android中的一种跨进程的通信方式。(这部分详细的可以去参考这篇文章Android Binder设计与实现)

2.跨进程通信使用的原因

在Android中,为了保持进程的独立性和安全性,一个进程不能直接操作或者访问另一进程,因此需要一种方式来进行进程之间的通讯。而在Android中进程,进程空间又被进一步划分为用户空间和内核空间,这两者主要区别在与

2.1用户空间的数据不能共享

2.2内核空间的数据可以共享

从上可知,在进程内我们可通过系统调用进行用户空间与内核空间的交互,如此可见下图

android Binding 怎么绑定xml和activity android binder详解_Android

对于用户空间和内核空间不太清楚的童鞋,可以参考这篇文章Android系统全貌文章

3.跨进程的实现方式

在Android跨进程中,主流的实现方式有

3.1通过Bundle,简单易用,主要适用于四大组件的通信

3.2通过AIDL,支持一对多高并发通信和实时通信,确定使用复杂,需要处理线程同步,一般应用于一对多通信且有PRC需求

3.3通过Messager,支持一对多串行通信,也支持实时通讯,然而缺点也在于其串行通信,不能处理高并发的情形,,且不支持RPC ,在传输数据方面,也只能传输Bundle所支持的数据。因此在使用时,只能适用于低并发的一对多数据且无RPC的需求或者无需要返回结果的RPC的需求

3.4通过ContentProvider,支持一对多高并发数据共享,可以通过Call方法扩展其他操作,但其缺点是主要提供数据源的CRUD操作,使用场景一对多进程共享

3.5通过Socket,支持网络字节传输流且支持一对多并发实时通讯,但是实现细节繁琐,不支持直接的PRC,主要适用于网络数据交换的场景。

其中上述几种方式中3.2和3.3本质上都AIDL只是Messenger是被同系统高度封装的。在下一篇中,我会介绍这几种方式的具体实现。

参考资料

1.Android开发艺术探索

2.Android Binder跨进程通信链接地址

3.Android Binder设计与实现,链接