Android系统运行在不同的进程中的应用程序组件和系统组件采用的进程间通信系统是Binder。Binder进程间通信系统在进程间传输数据时只需一次拷贝操作,既提高效率又节省空间。
Binder进程间通信机制是采用CS通信架构,即客户端client和服务端server架构,提供服务的进程称为Server进程,访问服务的进程称为Client进程。
同一个Server进程可以同时运行多个组件来想Client进程提供服务,这些组件称为Service组件(注意是一个Servier进程中运行多个Service组件)。同一个Client进程可以向多个Service组件请求服务,每一个请求对于了一个Client组件,或者称为Service代理对象。
Server进程和Client进程都维护一个Binder线程池来处理进程间通信请求,所以可并发地提供和访问服务。
Service组件启动时,会将自己注册到Service Manager组件,以便Client组件可以通过Service Manager组件找到它,因此,Service Manager被称为Binder进程间通信机制的上下文管理者,同时因为它要与普通Server进程和Client进程(注意这里不是组件)通信,所以也可以当做一个特殊的Service组件。
Binder进程间通信系统的Server进程和Client进程间的通信依靠内核空间的Binder驱动程序来进行,Binder驱动程序向用户空间暴露了一个设备文件/dev/binder。
Client、Service和Service Manager组件运行在用户空间,Binder驱动程序运行在内核空间。
Service Manager组件和Binder驱动程序由系统提供,Client和Service组件由应用程序实现。
Client、Service和Service Manager组件都是通过系统调用open、mmap和ioctl来访问设备文件/dev/binder,从而实现与Binder驱动程序交互,交互的目的是为了间接执行进程间通信。