一、作用 :
用于创建DVM或ART、应用程序进程,运行系统关键服务的SystemServer进程
二、创建进程方式
采用fork(复制进程)方式创建进程,被创建的进程都是复制Zygote的main()函数 所执行的所有代码,所以被创建的进程 都会有DVM和ART的副本。
三、Zygote根据系统32/64位,自身也区分32、64位
(1)Zygote启动多少位是由脚本决定的,启动Zygote的脚本是init.rc 文件中由import类型语句引入
(2)init.rc 的service 类型语句被解析成对象时,放入init进程的Service队列中时,就已经将Zygote真正的多少位封装到Service内部中了。
四、Zygote启动过程
如图所示:启动过程
Zygote启动后做了那些事以及作用
(1)init进程 创建子进程 通过轮训server队列 找到Zygote的执行路径,已经对应main函数,然后通过AndroidrunTime 的start方法 在子进程启动Zygote。
(2)在AndroidRuntime 中创建java虚拟机,并且为此java虚拟机注册JNI方法,
(3)在AndroidRuntime中通过JNI调用ZygoteInit的main方法,因为ZygoteInit是由java实现,在此处也就是表明了 在Zygote进程中是系统中第一次实现与java层调用对接。
(4)在Zygoteinit中会创建一个Socket的服务,这个Socket用于Zygote接受AMS发送创建进程的请求,所以Zygote创建新的进程是通过Socket接受消息实现的。
(5)在Zygoteinit中会创建通过注册的Socket的,并调用socket的轮训方法,等待AMS的请求创建新的进程
(6)在Zygoteinit中会做加载类和资源的的动作,不太清楚用处。
(7)在Zygoteinit中会将 Systemserver 进程启动