一、Binder是什么?
Binder是Android 进程间通信机制之一(IPC)
二、为什么一线企业开发的app要使用多线程?
1.突破进程内存限制:因为虚拟机分配给各个进程的运行内存是有限制的,LMK(低内存杀死机制)也会优先回收对系统资源占用多的进程。
2.功能稳定性:独立的通信进程保持长链接的稳定性。
3.规避系统内存泄漏:独立的webview进程阻隔内存泄漏导致的问题。
4.隔离风险:对于不稳定的功能放入单独的进程,避免导致主线程崩溃。
三、查看某个手机一个进程分配的运行内存是多大
1.adb shell
2.getprop dalvik.vm.heapsize
四、Linux的IPC机制有哪些?
管道、共享内存、信号、socket、消息队列等等
五、Binder有什么优势?
Binder需要拷贝一次从用户空间拷贝到内核空间(真正其实需要拷贝2次,一次是拷贝数据,一次是拷贝的请求头(8k/4k))
六、Binder如何做到一次拷贝的?
接收方和内核 有一块共享区域(通过mmap实现的)
七、为什么intent不能传递大数据?
Intent传输数据的机制中,用到了Binder。Intent中的数据,会作为Parcel被存储在Binder的事物缓冲区进行传输。而这个Binder事务缓冲区具有一个有限的固定大小。
限制为同步情况下为1M-8k,异步情况下为(1M-8k)/2
实际传递的数据要小于1M-8K,因为数据还要打包,还包含包头和命令
八、进程间通信的本质是:内存拷贝
九、内核空间和用户空间的区别
内核空间运行的是系统代码的空间/进程,用户空间运行的是用户代码
学习地址:
Android大厂面试必问—Binder【底层原理解析】_哔哩哔哩_bilibili
手撕 FrameWork源码,从Binder → Handler → Zygote → AMS → PMS → WMS 彻底讲穿原理_哔哩哔哩_bilibili