一.Binder是什么?
Binder就是Android中的血管,在Android中我们使用的Activity、Service等组件需要和AMS(system_server)通信,这种跨进程的通信都是通过Binder完成
- 机制:Binder是一种进程间通信机制
- 驱动:Binder是一个虚拟物理设备驱动
- 应用层:Binder是一个发起通信的Java类
二.多线程使用及优势
虚拟机分配给各个进程的运行内存是有限制的,LMK也会优先回收对系统资源占有较多的进程
- 突破进程内存限制
- 功能稳定性:独立的通信进程保持长连接的稳定性
- 规避系统内存泄露:独立的webview进程阻隔内存泄露导致的问题
- 隔离风险:对于不稳定的功能放入独立进程,避免导致主进程崩溃
- adb shell getprop dalvik.vm.heapsize查看虚拟机进程内存限制
三.内存划分
内存被操作系统划分为两块,用户空间和内核空间,用户空间时代码运行的的地方,内核空间时内核代码运行的地方,为了安全它们是隔离的,即使用户程序崩溃,内核也不受影响传统IPC机制:系统调用(copy_from_user)第一次拷贝,系统调用(copy_to_user)第二次拷贝。
四.binder与传统IPC对比优势
五.Binder是如何做到一次拷贝的
发送方与接收方内核有一块共享区域,mmap
六.MMAP原理
Binder映射关系 -----系统实现,发送方与接收方binder_mmap到同一物理内存
七.Binder机制是如何跨进程
内存映射,两进程虚拟内存mmap到同一物理内存
八.描述AIDL生成的Java类细节
data,reply
九.四大组件底层通信原理
十.为什么intent不能传递大数据
同步:Binder_size=1M-8k,实际数据比这个少,因为网络通信存在打包操作,异步比同步少一半
hander线程间通信机制