Android Zygote进程进阶
1. Zygote进程作用是什么?
- 启动SystemServer。
- SystemServer启动后做了什么?
- 创建Binder线程池。
- 启动SystemServiceManager。
- SystemServer启动后做了什么?
- 孵化App进程。
2. Zygote进程什么时候被启动?
Android系统启动后第一个启动的进程就是Zygote进程。
设备启动通过BootLoad加载Linux OS,启动Kernel,init进程是Linux os第一个进程,init进程通过读取init.rc配置文件,init进程启动子进程Zygote进程。
3. Zygote进程启动后做了什么?
Zygote在Native层:
- 启动Android虚拟机。
- 注册JNI函数。
Zygote在Java层:
- 预加载系统资源。
- 启动SystemServer服务进程。
- 启动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进程。