考察内容:
- 了解binder是用来干什么的?
(binder是用来跨进程通信的) - 应用里面哪些地方用到了binder机制?
- 应用的大致启动流程是怎样的?
- 一个进程是怎么启动binder机制的?
应用启动流程
什么时候支持binder机制的?
boolean runOnce(){
String[] args = readArgumentList();
int pid = Zygote.forkAndrSpecialize(...);
if(pid == 0){
handleChildProc(...); //将调用zygoteInit()
return true;
}
......
}
static void zygoteInit(){
//常规初始化
commonInit();
//启动binder机制:打开binder驱动、映射内存,分配缓冲区,注册线程、进入binder loop
nativeZygoteInit();
applicationInit(..);
}
怎么启动binder机制
回归:应用是怎么启动binder机制的?
- 了解binder是用来干什么的?
a)binder是用来跨进程通信的 - 应用里面哪些地方用到了binder机制?
a)调用系统服务
b)启动activity
c)发广播
d)只要涉及应用组件,都要需要跟AMS交互,就都涉及binder机制 - 应用的大致启动流程是怎样的?
(通过应用启动流程解释应用是什么时候启动binder机制的) - 一个进程是怎么启动binder机制的?
a)打开binder驱动
b)映射内存,分配缓冲区
c)注册binder线程
d)进入binder loop