Binder是Android系统提供的一种IPC(进程件通信)机制,由于Android基于Linux,所以除了Binder之外,还存在其他IPC机制,比如:管道,socket等。Binder的优势在于灵活,方便及安全
Android系统中主要有四个组件Client
, Server
, Service Manager
, BinderDriver
组成,关系图如下
Client
,Srever
,ServiceManager
在用户控件实现,只有Binder Driver
是在内核空间实现。(也就是多对于还没研究内核的开发者而言,Binder Driver可先只做了解。)Server
进程先注册一些Service
到ServiceManager
中,所以server
是ServiceManager
的客户端,而ServiceManager
是服务端,ServiceManger
是一个守护进程,并向Client
提供查询Server
接口。Client
想要使用某个Service
时先到ServiceManager
中获取Service
的相关信息,然后根据这些信息与Service
所在Server
进程间简历通信通路Binder
驱动程序就是用来在三者之间传递信息的一种工具
大家会发现,这个很像代理模式,不应该说就是代理模式。通俗的理解是:
宅男Client,女神Server,婚介所ServiceManager,网络平台Binder Driver。女神Server太优秀导致没人敢要,所以先将自己的有的一些服务Service(造娃,嘿嘿嘿...)通过网络(Binder Driver)的方式挂载到婚介所,然后等待别人的联系。某一天宅男(Client)感觉很空虚,于是想娶个媳妇回家传宗接代,但是一直没有找到合适的对象,但是它知道有ServiceManager这样一个婚介所,所以他就把他对老婆的要求(造娃,嘿嘿嘿 。。。)告诉ServiceManager,然后ServiceManager查看记录发现还真有这么一个合适的对象,然后就将这个女神的PID 告诉了它,然后宅男Client再把他自己的PID告诉女神Server,女神没办不想成为剩女所以只能和他通过上网的方式聊天骗取感情,但是他们一直没有见过面,所以只能通过Binder这个平台来发消息,收消息。
PS:
Binder进程间通信机制的每一个Server进程和Client进程都维护一个Binder线程池来处理进程间通信请求,因此Server进程和Client进程可以并发地提供和访问服务。Binder驱动程序向用户空间暴露了一个设备文件/dev/binder
,使得应用程序进程可以间接地通过它来建立通信通道。
上面纯属扯淡,有兴趣的还是自己去看书吧!
《深入理解Android5.0源码》
《深入理解Android 卷I》
《Android系统源代码情景分析》罗升阳大神著