Android Zygote进程进阶

1. Zygote进程作用是什么?

  • 启动SystemServer。
    • SystemServer启动后做了什么?
      • 创建Binder线程池。
      • 启动SystemServiceManager。
  • 孵化App进程。

2. Zygote进程什么时候被启动?

  Android系统启动后第一个启动的进程就是Zygote进程。

  设备启动通过BootLoad加载Linux OS,启动Kernel,init进程是Linux os第一个进程,init进程通过读取init.rc配置文件,init进程启动子进程Zygote进程。

 

 

3. Zygote进程启动后做了什么?

   Zygote在Native层:

  1. 启动Android虚拟机。
  2. 注册JNI函数。

  Zygote在Java层:

  1. 预加载系统资源。
  2. 启动SystemServer服务进程。
  3. 启动Socket Loop。

Zygote流程步骤:

  • 启动Android虚拟机。
  • 注册JNI函数。
  • 预加载系统资源。
  • 启动SystemServer。
  • 启动Socket Loop。

注意:Zygote进程与SystemServer进程IPC通信通过Socket完成,而非Binder进程。

5. Zygote进程如何fork启动一个新应用进程

  Zygote进程通过复制自身方式创建一个新应用进程,由于Zygote进程启动时内部会创建一个虚拟机实例,因此,通过复制自身方式创建新应用进程时,新应用进程也会得到一个虚拟机实例拷贝。

6. Fork进程需要注意哪些问题

  

 

  •  Fork子进程,在单线程完成,其它进程停止,不然,会出现不可预知的错误。
  • 父进程Fork一个子进程,在父进程中返回子进程PID,而在子进程中PID为0。
  • 子进程Kill后,会通过SIGCHLD信号通过父进程,子进程Killed,是否重启还是其它操作,看具体逻辑。

在Android中Zygote子进程killed后,由init进程重新Fork Zyogte进程。

 

posted @ 2021-08-31 10:47  naray  阅读(241)  评论(0编辑  收藏  举报