android中的binder机制(不是说代码,说说实现的原理,你不得错过)

binder分为几个部分:client,service,servicemanager,driver,

binder机制概要:传送的数据都是通过存放在driver的内核缓冲区中的,这样client会向binder发送命令往这个共享区域写数据,service的binder线程也会从这里读数据,过程是阻塞的,这样线程安全。


第一点,在客户端调用,实际是在和driver交互,不是在和service交互。

第二点:我们是怎么获取我们想要的service:所有的service都在servicemanager中注册了,要找,向他要,那怎么要呢?第三点

第三点:这要牵扯到servicemanager的注册,servicemanager的注册可以理解为:在servicemanager启动的时候,就会自告奋勇的申请成为driver的上下文,至于上下文里面的内容就是"xxxxx.xxx.xxxservice"=service这样的引用,这些引用是怎么生成的呢?第四点

第四点:当service要启动的时候,会主动的先向driver得到servicemanager的引用,然后再向servicemanafger发送第三点当中提到的引用,而在service的启动过程中,会通过driver在driver的内核空间创建一个共享的数据缓冲区(binder概要中提到的缓冲区就是这个),其实我个人观点,你要是把第三点当中提到的注册在servicemanager中的引用理解为这个缓冲区的引用吗,也不错,就是那么回事

第五点:在service启动的过程中,还启动了许多的线程来处理binder驱动卸载缓冲区的数据,这就是binder线程



上面所说只是为了在对binder有个大体的理解:

android中的binder机制(不是说代码,说说实现的原理,你不得错过)_第1张图片






你可能感兴趣的:(android)