美文网首页
深入理解Binder

深入理解Binder

作者: nziyouren | 来源:发表于2017-05-21 17:43 被阅读0次

ServiceManager是运行在单独的进程中的,MediaServer通过Binder机制跟ServiceManger进行通信,MediaServer(运行在跟ServiceManager不同的进程)初始化媒体相关的几个Service,然后加入到ServiceManger中进行管理。

Binder机制是Android系统非常重要的一种IPC机制,代理端BpBinder,服务端BbBinder,都实现IBinder接口。BpBinder和BbBinder其实都是运行在表面的棋子,真正进行进程间通信(说白了就是真正干活)的是IPCThreadState ,通过transaction方法与Binder设备层(内核)进行通信。主要是两个步骤:(1)打开Binder设备(2)内存映射

ServiceManger的服务端其实没有采用Android系统的封装BbBinder机制来运作的,它是直接用的原始代码直接打开Binder设备,内存映射,读取数据来进行的。

ServiceManger的作用:

(1)个人觉得体现了职责分工明确的设计思想,类似于Facade模式

(2)ServiceManager能够进行权限的控制

Service常见几点:

(1)本地进程的Service访问无需使用AIDL,直接使用startService或者bindService使用。

(2)非本地进程如果没有多线程访问的需求,可以使用Messenger进行IPC访问,Messenger关联相应的Handler,发送message,其本质也是通过binder来进行IPC通信的。

(3)对于跨进程而且多线程同时访问的需求,可以使用AIDL方式进行。这个情况Service实现段要注意线程安全问题。

AIDL工具的作用就是按照AIDL文件的接口定义自动产生Service对应的服务端和客户端(代理端)胶水代码,服务端为stub,客户端为proxy。proxy根据构造时候传入的stub参数(IBinder类型),调用stub进行相应的方法处理。stub从parcel的data里读取相应的参数,执行相应的方法,再把方法执行结构写入parcel的reply对象。proxy从reply读取返回值并构造成相应的执行结果,到了这个时候IPC调用彻底执行完成。说白了stub才是其实真正做这个事情的幕后员工!

相关文章

网友评论

      本文标题:深入理解Binder

      本文链接:https://www.haomeiwen.com/subject/sghvxxtx.html