# Zygote进程

## 目录
- [Zygote作用](#zygote作用)
- [Zygote启动流程](#zygote启动流程)
- [Zygote进程创建](#zygote进程创建)
- [Zygote源码分析](#zygote源码分析)
- [面试常见问题](#面试常见问题)

---

## Zygote作用

### Zygote 简介

```java
// Zygote：Android 系统的第一个 Java 进程
// - 预加载类和资源
// - 孵化应用进程
// - 共享代码和资源
```

### Zygote 优势

```java
// 1. 快速启动：预加载类和资源
// 2. 内存共享：共享代码和资源
// 3. 安全性：进程隔离
```

---

## Zygote启动流程

### 启动流程

```
1. Init 进程启动
2. 启动 Zygote 进程
3. Zygote 预加载类和资源
4. Zygote 进入循环，等待请求
5. 收到请求，fork 新进程
```

---

## Zygote进程创建

### fork 进程

```java
// Zygote 收到创建进程请求
// 1. fork() 创建新进程
// 2. 新进程继承 Zygote 的代码和资源
// 3. 新进程执行应用代码
```

### 进程创建流程

```
1. AMS 请求创建进程
2. Zygote 收到请求
3. Zygote.fork() 创建进程
4. 新进程执行 ActivityThread.main()
5. 应用进程启动完成
```

---

## Zygote源码分析

### 关键类

```java
// ZygoteInit：Zygote 初始化
// ZygoteServer：Zygote 服务器
// Zygote：进程创建
```

### 关键方法

```java
// main()：Zygote 入口
// forkAndSpecialize()：创建应用进程
// preload()：预加载
```

---

## 面试常见问题

### Q1: Zygote 的作用？

**答案：**
- 预加载类和资源
- 孵化应用进程
- 共享代码和资源

### Q2: Zygote 启动流程？

**答案：**
1. Init 进程启动 Zygote
2. Zygote 预加载
3. Zygote 进入循环
4. 收到请求，fork 新进程

### Q3: 为什么使用 Zygote？

**答案：**
1. 快速启动：预加载类和资源
2. 内存共享：共享代码和资源
3. 安全性：进程隔离

---

*最后更新：2024年*
