0%

第5章:Binder进程间通信系统

Android 应用程序由 Activity、Service、Broadcast Receiver 和 Content Provider 四中组件构成,它们可能运行在不同的进程中。此外,各种系统组件也运行在独立的进程中,如 Activity 管理服务 ActivityManagerService 和 package 管理服务 PackageManagerService 都运行在系统进程 System 中。

Android 是基于 Linux 内核开发的,Linux 内核提供了丰富的进程间通信机制:管道(Pipe)、信号(Signal)、消息队列(Message)、共享内存(Share Memory) 和 套接字(Socket) 等。但Android 系统并没有采用这些传统的进程间通信机制,而是使用了新的机制——Binder。与传统的进程间通信机制相比,Binder 进程间通信机制在进程间传输数据时,只需要执行一次复制操作,不仅提高了效率,并且节省了内存空间。

使用共享内存在进程间传输数据的时候,虽然也只需要进行一次复制操作,但是它一般要结合其他的进程间通信机制来同步信息。

Binder 进程间通信机制采用 C/S 通信方式,提供服务的进程称为 Server 进程,而访问服务的进程称为 Client 进程,同一个 Server 进程可以同时运行多个组件来向 Client 提供服务;而同一个 Client 进程也可以同时向多个 Service 组件请求服务。Service 组件启动时,会将自己注册到一个 Service Manager 组件中,以便 Client 组件可以通过 Service Manager 组件找到它。Binder 进程间通信机制中涉及了 Client、Service、Service Manager 和 Binder 驱动程序四个角色的关系如下图所示:

Binder通信机制

Client、Service 和 Service Manager 都运行在用户控件,而Binder 驱动程序运行在内核控件。Client、Service 和 Service Manager 均是通过系统调用 open(打开)、mmap(内存映射)、ioctl(在用户空间,使用ioctl系统调用来控制设备) 来访问设备文件 /dev/binder ,从而实现与Binder驱动的程序的交互,而交互的目的就是为了能够间接执行进程间通信。

谢谢你的鼓励