1、Binder是什么?
- 进程间通信机制
- 是一个驱动
- Binder.java 实现了IBinder接口,具有跨进程的能力
2、使用场景
自己创建的:webview、音视频播放、大图浏览、推送
系统服务:打电话、闹钟
3、优点
内存:每个app分配的内存是有限的,多进程相当于加内存
风险隔离:crash不会影响主app进程
4、Linux进程通信有哪些
管道、信号量、socket、共享内存等
Android为什么要增加Binder?
Binder | 共享内存 | Socket | |
---|---|---|---|
性能 | 1次拷贝 | 无需拷贝 | 2次拷贝 |
特点 | 基于C/S架构,易用性高 | 控制复杂,易用性查 | 基于C/S架构,通用接口,传输效率低,开销大 |
安全性 | 为每个APP分配UID,同时支持实名和匿名,安全 | 依赖上层协议,访问接入点是开放的,不安全 | 依赖上层协议,访问接入点是开放的,不安全 |
5、内存划分
内存被操作系统划分为:用户空间和内核空间,用户空间是用户程序代码运行的地方,内核空间是内核代码运动的地方,为了安全,用户空间和内核空间是隔离的。
binder内存划分.png
6、MMAP与Binder数据传输
内存映射:将一个虚拟内存区域与一个磁盘上的对象关联起来,这个过程称为内存映射(Memory Mapping)
mmap.png
1)Binder驱动创建一块接收缓存区
2)根据需要映射的接收进程的信息,实现内核缓存区和接受进程用户空间地址同时映射到一个共享缓存区
3)发送进程通过系统调用copy_form_user(),发送数据到虚拟内存区域(需要拷贝1次)
4)由于内核缓存区和接收进程用户存在映射关系,相当于也发送到了接收进程的用户空间,实现了跨进程通信
网友评论