1、跨进程的原理
跨进程通信必须经过第三方介质,要么是内存,要么是外存(文件) 以内核为例:进程A将自己的数据拷贝到内核中,进程B在将内核中的数据拷贝到进程B中。
问:跨进程通信需要内核的支持,Binder 不是内核的一部分,为什么可以支持跨进程通信? 答:Binder 采用了Linux 的动态内核可加载模块机制,将Binder 作为一个内核模块加载到了内核空间,这个模块叫Binder驱动
Binder 采用了Linux 中的内存映射技术,减少了数据的拷贝次数,提高了效率
2、Binder通信过程中涉及到的模型
Binder驱动 :类似电话线路Binder :电话号码Client :代表打电话的人Server :代表接电话的人ServerManager :代表114号码台
过程:接电话的人(Server )告诉114号码台(ServerManager )自己的号码(Binder ),打电话的人(Client )向114号码台(ServerManager )查询某个人的号码(Binder ),查询到后,给对方打电话。整个通信过程由电话线路(Binder驱动支持 )。
3、Java 中看具体的类
- 服务端需要关心的:
IInterface :对外提供的服务需要继承这个接口,表示接口中的方法可以跨进程提供服务IBinder :需要跨进程传输的对象要实现这个类,表示该对象可以跨进程传输(类似于用IBinder包装了一下),具体由Binder 实现 - 客户端需要关心的:
ServiceConnection :从中拿到Binder 对象,从Binder 中解析出传输的对象。
|