1、架构图
传统的进程间通讯(管道...)
1)client用户空间拷贝数据到内核空间
2)内核空间的数据再拷贝到server的用户空间
这里面用了两次内存拷贝
Binder机制
1)如图是三个进程,Client & ServiceManager & Server
2)进程中有用户空间&内核空间,内核空间只能通过系统调用去交互。
3)ServiceManager 在系统启动的时候会mmap binder驱动,就是做一个64k的虚拟内存映射,这个映射也是android binder交互的基础。
交互流程:
1、client端通过binder机制,用系统调用写data到内核空间的虚拟内存中。
2、Server端通过binder机制,用系统调用从虚拟内存中读出data。
整个的交互过程只有一次数据拷贝,就是client 写数据到内核空间的过。,所有的server端都必须是Service,因为需要在ServiceManager里面注册,才能利用ServiceManager的mmap。
2、bindService流程
1)上图是一个从client端bind远端service的代码流程
2)图中涉及到三个进程之间的交互,Client process & System process & Server process
3)图中总共有五次的binder通讯,都是在跨进程通讯的时候。