Zygote概述
在Android系统中,DVM(Dalvik虚拟机)和ART,应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将他称为孵化器。他通过fock(复制进程)的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建DVM或者ART,因此通过fock而创建的应用程序进程和SystemServer进程可以在内部获取DVM或者ART的实例副本。
Zygote进程启动总结
Zygote进程启动共做了如下几件事:
1)创建AppRuntime并调用start方法,启动Zygote进程
2)创建java虚拟机并为java虚拟机注册JNI方法
3)通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层
4)通过registerZygoteSocket方法注创建服务端Socket,并通过runSelectLoop方法等待AMS的请求来创建新的应用程序进程
5)启动SystemServer进程
谈谈对zygote的理解
What:zygote的作用是什么?
How:zygote的启动流程是什么?
1.进程是怎么启动的?
1)Init进程获取启动配置文件
Init进程
加载init.rc启动配置文件
init.rc定义了要启动的服务,Zygote是要启动的服务之一
2)启动进程
fork+handle
fork+execve
2.进程启动后做了什么?
1)Zygote的native世界
启动Android虚拟机
注册Android的JNI函数
进入Java世界
2)Zygote的Java世界
Preload Resources
System server
LOOP
3)要注意的细节
Zygote fork 要单进程
Zygote的IPC没用采用binder
Why:zygote的工作原理是什么?
两个问题
孵化应用进程这种是为什么不交给SystemServer来做,而专门设计几个Zygote?
Zygote的IPC通信机制为什么不采用binder?如果采用binder的话会有什么问题吗?
启动三段式
进程启动->准备工作->LOOP