美文网首页
Zygote进程

Zygote进程

作者: 六月小微风Online | 来源:发表于2019-10-16 01:42 被阅读0次
    1. Zygote的两个作用:
    • 启动SystemServer
    • 孵化应用进程
    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世界的准备工作:

    • 启动Java虚拟机
    • 注册Android的JNI函数
    • 进入Java世界

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

    • 加载资源(比如主题)
    • fork出SystemServer进程
    • 进入LOOP循环(轮询socket,外界可以与之进行socket通信)
    //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继承过来的,是进程创建成功后,自己去启动出来的。

    相关文章

      网友评论

          本文标题:Zygote进程

          本文链接:https://www.haomeiwen.com/subject/sbaemctx.html