面试总结
Zygote 进程启动共做了如下几件事:
1、创建AppRuntime 并调用其start方法,启动Zygote进程
2、创建java虚拟机并为java虚拟机注册JNI方法
3、通过JNI调用ZygoteInit 的main 函数进入Zygote的Java框架层
4、通过registerZygoteSocket 方法创建服务器端Socket,并通过runSelectLoop方法等待AMS的请求来创建新的应用程序进程
5、启动SystemService进程
//#################################分割线 #################################################
Zygote 概述
Android系统中DVM(Dalvik虚拟机)和ART、应用程序进程以及运行系统的关键服务的SystemService进程都是由Zygote进程来创建的,我们称之为孵化器。
它通过fock的形来创建应用程序进程和SystemService进程,由于Zygote进程在启动时会创建DVM或者ART,因此通过fock而创建的应用程序进程和SystemService进程可以在内部获取一个DVM或者ART的实例副本
//#################################分割线 #################################################
Zygote 进程启动过程时序图
Zygote 进程都是通过fock自身来创建子进程
//######