为什么使用多进程:
- App运行独立的虚拟机,每个进程分配运行内存是有限的——32M、64M,如果加载一个大图片就会直接OOM。多进程可以解决内存不够的情况。
- 如果功能崩溃了不会影响进程,比如微信小程序崩了不会影响其他进程。
Binder 安卓专门制造的通信机制
性能:
内存空间是分开的但是内核空间是公用的
虚拟空间、物理空间
传统的IPC先从进程1拷贝到内核空间,再从内核空间拷贝到进程2
Binder将内核空间和进程2两个虚拟空间都映射到同一个物理空间,所以只需要拷贝1次
如果把三个全部映射到同一个物理空间——共享内存,就容易造成死锁
安全性:
为每个app分配了一个UID所以更安全
传统是自己传入UID
传统的接入点是开放的,Binder是系统返回回来的
AIDL
接口传递的对象要序列化
客户端这边直接把aidl包复制过来,包名不能变,对象也要复制过来,包名也不能变。
Stub是接口的实现类
两个内部类:Proxy 和 Stub 一个用来从客户端发到服务端,从服务端发到客户端