应用:广播内部实现原理
1. 与Binder相关的linux内核知识

- 进程隔离和虚拟地址空间:每个进程都占有一个虚拟的地址空间,通过进程隔离技术保证操作系统中的各个进程互不干扰
备注
:不同进程间数据不共享,android中使用binder通信机制实现进程间通信 - 系统调用:用户空间通过系统调用来访问内核的某些程序
备注
:内核保护机制将内核层和用户空间分离,并限定用户空间可以访问的内核数据 - binder驱动:在android系统中binder驱动运行在
内核
空间中,负责各个进程
通过binder通信内核
进行交互
的模块
2. Binder通信机制
(1) What is Binder:Binder 是一种跨进程的通信机制
(2) 为什么要使用Binder:Android所基于的Linux内核虽然已有很多的跨进程通信机制(如:管道、Socket等),但是作为应用层,进程间的通信非常频繁,对跨进程通信机制的性能要求更高,Binder在性能上比传统的Socket更高效;而且传统的跨进程通信对通信的双方没有严格的限定(如:socket通信的IP地址是客户端填写,可进行人为地伪造),Binder会使通信更安全(协议本身就支持通信双发的身份校验)。所以android有了特有
的跨进程通信机制Binder,他比传统的跨进程通信机制更高效
和安全
。
(3) Binder通信模型(c/s)

通信的步骤:
- 建立ServiceManage表
- 进程启动时会在ServiceManage中注册
- 进程A访问进程B时会先去ServiceManage表中进行查询,ServiceManage返回查询结果给进程A
(4) Binder跨进程通信机制原理

如:Client端(进程A)访问Service端(进程B)的Object对象的add()方法
- 建立ServiceManage表
- Service端在ServiceManage中注册Object对象的add()方法
- Client端请求Service端的Object对象的add()方法时,会去ServiceManage表中进行查询,ServiceManage返回Object的代理对象
- Client端调用代理对象的add()方法时,Binder驱动会去Service端查找真正的Object对象,并调用add(),之后将add()方法的结果返回给Binder驱动,Binder驱动再将结果返回给Client端。
注意:客户端进程仅持有了服务端的代理对象,代理对象
协助驱动
去完成跨进程通信
- 对于Service端进程来说:Binder指Binder本地对象
- 对于Client端进程来说:Binder指Binder代理对象
3. AIDL实现
(1) AIDL:AIDL(Android Interface Definition Language:Android接口定义语言)是 Android 提供的一种进程间通信 (IPC) 机制
网友评论