关于android系统Binder机制解析

        刚刚开始写博客,这次讲一下我对android Binder机制的理解。

        Binder机制主要是为了进程间通信机制,也有别的方式(当然别的也没了解过),但是在android中用的最多的是Binder机制,在开始说Binder机制前先说一下这个机制的成员,1  ServiceManager(即是Client端也是Server端,一会儿会说), 2, Binder驱动, 3,系统服务(如MediaServer,是属于Server端)4,需要用服务的进程(Client端)。

这四个钟 1    2    4之间的无论是哪两个的通信都需要Binder驱动程序,都能解释Binder机制。

                                                                               关于android系统Binder机制解析_第1张图片

         android系统启动的时候会开启ServiceManager进程,并且将自己的handle设置成0(这样别的服务就可以通过handle找到ServiceManager),并打开Binder驱动,并映射内存地址(关于驱动程序我也不是很理解,现在只知道进程可以跟驱动程序打交道,说白了就是多个进程操作一个驱动程序来实现进程间通信),这个时候ServiceManager已经准备好了。

         比如某一个系统服务需要把自己注册到ServiceManager里面,由于ServiceManager和这个系统服务不在一个进程里面,需要先得到ServiceManager的代理,是实现了BpBinder(这个就是真正跟Binder驱动打交道的类,这里面有一些方法是跟Binder驱动打交道的)的代理类,用defaultServiceManager()方法得到ServiceManager的代理(handle为0,发消息的时候会带上handle的),然后执行注册的函数,而Binder驱动会把这个请求给ServiceManager(真正的)处理,然后把这个系统服务的信息保存起来,这就是一次进程间通信了。

         上面只是非常简单的描述了一下,实际的代码量是很大的,看的时候一定要先了解个大概再去看,不然看多长时间都看不懂的,如果需要掌握这些技术的朋友可以下一份android源码,然后结合 “深入理解android” 这本书看,会有更深的印象,当然需要c++的基础,没有的话先看一本c++的书,再去研究。

         可能有不对的地方请指出来,一起学习一起进步,有时间会继续写更详细的博客,希望继续关注。

你可能感兴趣的:(android,底层解析)