# 系统启动流程

## 目录
- [系统启动流程](#系统启动流程)
- [BootLoader](#bootloader)
- [Kernel启动](#kernel启动)
- [Init进程](#init进程)
- [Zygote进程](#zygote进程)
- [SystemServer](#systemserver)
- [Launcher启动](#launcher启动)
- [面试常见问题](#面试常见问题)

---

## 系统启动流程

### 完整流程

```
1. BootLoader：引导加载程序
2. Kernel：Linux 内核启动
3. Init 进程：第一个用户进程
4. Zygote 进程：Java 进程孵化器
5. SystemServer：系统服务
6. Launcher：桌面启动
```

---

## BootLoader

### BootLoader 作用

```java
// BootLoader：引导加载程序
// - 初始化硬件
// - 加载内核
// - 启动内核
```

---

## Kernel启动

### Kernel 启动

```java
// Linux 内核启动
// 1. 初始化硬件
// 2. 加载驱动
// 3. 启动 Init 进程
```

---

## Init进程

### Init 进程

```java
// Init 进程：第一个用户进程
// - PID = 1
// - 启动其他进程
// - 管理进程生命周期
```

### Init 启动的服务

```java
// 1. Zygote
// 2. ServiceManager
// 3. 其他系统服务
```

---

## Zygote进程

### Zygote 启动

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

---

## SystemServer

### SystemServer 启动

```java
// SystemServer：系统服务进程
// 1. Zygote fork SystemServer
// 2. SystemServer 启动系统服务
//    - ActivityManagerService
//    - WindowManagerService
//    - PackageManagerService
//    - 等其他服务
```

---

## Launcher启动

### Launcher 启动

```java
// Launcher：桌面应用
// 1. SystemServer 启动完成后
// 2. AMS 启动 Launcher
// 3. 用户看到桌面
```

---

## 面试常见问题

### Q1: Android 系统启动流程？

**答案：**
1. BootLoader
2. Kernel
3. Init 进程
4. Zygote 进程
5. SystemServer
6. Launcher

### Q2: Zygote 的作用？

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

### Q3: SystemServer 的作用？

**答案：**
- 启动系统服务
- AMS、WMS、PMS 等
- 管理系统服务

---

*最后更新：2024年*
