Android的底层基于linux相信这是所有android开发人员都了解的,但是android得进程间通信机制可以说是外来户,罗老师介绍的很详细,这里我整理一下:
- 提供服务的进程称为Server进程,而访问服务的进程称为Client进程。
- 同一个Server进程可以同时运行多个组件来向Client进程提供服务,这些组件称为Service组件。
- 同时,同一个Client进程也可以同时向多个Service组件请求服务,每一个请求都对应有一个Client组件,或者称为Service代理对象。
- Server进程和Client进程都维护一个Binder线程池来处理进程间的通信请求,已实现并发地提供和访问服务。
- Server进程和Client进程的通信要依靠运行在内核空间的Binder驱动程序来进行。Binder驱动程序向用户空间暴露了一个设备文件/dev/binder,使得应用程序进程可以间接地通过它来建立通信通道。
- Service组件在启动时,会将自己注册到一个Service Manager组件中,以便Client组件可以通过Service Manager组件找到它。因此,我们将Service Manager组件称为Binder进程间通信机制的上下文管理者,同时由于它也需要与普通的Server进程和Client进程通信,我们也将它看作是一个Service组件,只不过它是一个特殊的Service组件。
- Client、Service和Service Manager运行在用户空间,而Binder驱动程序运行在内核空间,其中,Service Manager和Binder驱动程序由系统负责提供,而Client和Service组件由应用程序来实现。Client、Service和Service Manager均是通过系统调用open、mmap和ioctl来访问设备文件/dev/binder,从而实现与Binder驱动程序的交互,而交互的目的就是为了能够间接地执行进程间通信。
用一张图来说明一下
Binder驱动程序实现在内核空间中,注意驱动程序是放在kernel中的,而不是放在android源代码中的。我并没有下载源码,而是在上看到源码,用的是kernel3.18源代码,搜索一下就能找到binder.h 和 binder.c文件。他就是一个比较标准的驱动程序,设备文件就是 /dev/binder ,但是没有提供hal层的代码。