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
中解析出传输的对象。