什么是Zygote?
Zygote中文翻译为“受精卵”,正如其名,它主要用于孵化子进程。是 Android 系统中的一个核心进程,是所有 Android 应用程序进程的父进程,它在系统启动时被初始化。Zygote 的主要任务是加载系统的核心类库(如 Java 核心库和 Android 核心库),然后进入一个循环,等待请求来创建新的 Android 应用程序进程。
当一个新的 Android 应用程序需要启动时,Zygote 会 fork 出一个新的进程,这个新的进程继承了 Zygote 的内存空间,包括已经预加载的类库。这种方式可以大大提高新进程的启动速度,因为不需要再次加载这些类库。
Zygote的启动流程有哪些?
在 init.rc 文件导入init.zygote64_32.rc文件,在init.zygote64_32.rc文件中执行class main 来启动 Zygote进程。
为什么要有Zygote?
Zygote用来作为一个开启APP进程的管理者,防止资源过度耗费;
为什么要用Socket方式启动app进程,而不用Bind呢?
因为安全,如果使用bind容易造成hook,使进程执行过程中被拦截而挂掉,但是使用Socket的话,Zygote作为一个公共服务类,可以做到一对多的模式(Client-Service模型)。
LauncherAPP的启动流程
通过ActivityManager.getService()绑定AMS,从而获取到SystemServer进程中的AMS引用,执行startActvity()方法中Socket发送消息给Zygote,Zygote通过fork()方法执行ActivityThread.Main()来创建APP进程。通过attach读取AndroidManifest.xml中的MainActivity启动APP界面。