1.参考文章:
(1)Binder系列—开篇:
http://gityuan.com/2015/10/31/binder-prepare/
(2)Binder系列10—总结
http://gityuan.com/2015/11/28/binder-summary/
(3)彻底理解Android Binder通信架构
http://gityuan.com/2016/09/04/binder-start-service/
2.个人理解笔记
(1)是什么?
Binder是Android跨进程通信的桥梁工具
(2)实现的原理是什么?
Android操作系统在用户空间进程的存储空间独立;但在内核空间存储空间可以共用。通过内核空间的Binder驱动实现跨进程的通信。
基本的架构类似与网络协议的分层,从应用层,到fremework层,到native层,到内核层的Binder Dirvier;逐层透传下去。
Binder架构也是采用分层架构设计, 每一层都有其不同的功能:
Java应用层: 对于上层应用通过调用AMP.startService, 完全可以不用关心底层,经过层层调用,最终必然会调用到AMS.startService.
Java IPC层: Binder通信是采用C/S架构, Android系统的基础架构便已设计好Binder在Java framework层的Binder客户类BinderProxy和服务类Binder;
Native IPC层: 对于Native层,如果需要直接使用Binder(比如media相关), 则可以直接使用BpBinder和BBinder(当然这里还有JavaBBinder)即可, 对于上一层Java IPC的通信也是基于这个层面.
Kernel物理层: 这里是Binder Driver, 前面3层都跑在用户空间,对于用户空间的内存资源是不共享的,每个Android的进程只能运行在自己进程所拥有的虚拟地址空间, 而内核空间却是可共享的. 真正通信的核心环节还是在Binder Driver.
更加细节的架构: