Zygote进程

2019-10-16  本文已影响0人  六月小微风Online
1. Zygote的两个作用:
2. Zygote的启动三步骤

(1)进程启动
(2)准备工作
(3)LOOP循环接收消息
不只是Zygote启动是这样的套路,SystemServer进程的启动同样如此,甚至包括app的应用进程也是的。

3. Zygote的启动具体过程

(1)启动配置:
init进程 <—(init.rc文件)
init.rc文件包含要启动Zygote进程的必要信息。
(2)启动进程:

pid_t pid = fork();
if(pid == 0)
//childProcess
else
//parentProcess

子进程返回的pid为0;父进程返回的pid是子进程的pid。因此可以通过判断当前pid的值,来判断当前是子进程还是父进程。

4. Zygote进程启动之后

(1)Native:
Zygote是C++实现的,该进程启动之后会做两件事情,第一是在Native世界完成执行Java世界的准备工作:

(2)Java
进入Java世界后,Zygote主要做三件事:

//LOOP循环的逻辑
LOOP{
  if(isMsg){
     runOnce(); 
  }else
    continue;
}

//
v  runOnce(){
  String[] args = readArgumengList();
  int pid = Zygote.forkAndSpecialize();
  if(pid == 0){
    //in child子进程执行ActivityThread.main()应用进程
    handleChildProc(args,……);
    return true;
  }
}
5. Zygote进程和应用进程的关系

app应用进程是从Zygote进程fork出来的,是父子的关系,有继承。但是注意,应用进程的Binder机制却不是从Zygote继承过来的,是进程创建成功后,自己去启动出来的。

上一篇下一篇

猜你喜欢

热点阅读