目录
参考文章:
Android系统启动流程(二)解析Zygote进程启动过程
以上三篇文章涉及到C语言源码,比较难懂。
这道题想考察什么?
- 了解Zygote的作用(初级)
- 熟悉Zygote的启动流程(中级)
- 深刻理解Zygote的工作原理(高级)
Zygote简介:
Zygote 美 [ˈzaɪɡoʊt] 受精卵 ,孵化器
在Android系统中,DVM(Dalvik虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器。它通过fork(复制进程)的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建DVM,因此通过fork而创建的应用程序进程和SystemServer进程可以在内部获取一个DVM的实例拷贝。
了解Zygote的作用(初级)
1、启动SystemServer:SystemServer的启动需要Zygote准备的一些资源,比如:一些常用类、JNI函数、主题资源、共享库2、孵化应用进程
熟悉Zygote的启动流程(中级)
先来了解一下进程启动的三段式:启动、准备工作、Loop
关于Zygote的启动流程,我们需要了解一下两点:
1、Zygote进程怎么启动?
init简介:init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。
Zygote进程是由init进程启动的。
2、Zygote启动之后做了什么?
Zygote的Native部分
- 1、启动Android虚拟机
- 2、注册Android的JNI函数
- 3、进入Java部分
Zygote的Java部分
- 1、Preload Resources 预加载资源
- 2、启动SystemServer(用fork的方法启动,单独跑在一个线程中)
- 3、进入Loop循环(等待的是socket信息)
要注意的的细节:
- Zygote fork要单线程
- Zygote的IPC没有采用binder,采用的本地的socket通信
两个问题
1、孵化应用进程这种事为什么不交给SystemServer来做,而专门设计一个Zygote?
2、Zygote的IPC通信机制为什么不采用binder?如果采用binder的话会有什么问题?
深刻理解Zygote的工作原理(高级)
总结:
谈谈你对Zygote的理解?
再回到这个问题,我们可以从三个方面来回答:What、How、Why
What:Zygote是什么,它的作用是什么
Zygote是一个孵化器,作用是:启动SystemServer和孵化应用进程