# AMS原理

## 目录
- [AMS架构](#ams架构)
- [Activity启动流程](#activity启动流程)
- [Service启动流程](#service启动流程)
- [BroadcastReceiver流程](#broadcastreceiver流程)
- [AMS源码分析](#ams源码分析)
- [面试常见问题](#面试常见问题)

---

## AMS架构

### AMS 简介

```java
// AMS：Activity Manager Service
// 管理 Activity、Service、BroadcastReceiver 等组件
// 系统服务，运行在 system_server 进程
```

### AMS 职责

```java
// 1. Activity 生命周期管理
// 2. Service 生命周期管理
// 3. BroadcastReceiver 管理
// 4. 进程管理
// 5. 任务栈管理
```

---

## Activity启动流程

### 启动流程

```
1. startActivity()
2. ActivityManagerService.startActivity()
3. ActivityStackSupervisor.startActivityLocked()
4. ActivityStack.startActivityLocked()
5. ActivityStack.resumeTopActivityLocked()
6. ActivityStackSupervisor.realStartActivityLocked()
7. ApplicationThread.scheduleLaunchActivity()
8. ActivityThread.handleLaunchActivity()
9. Activity.onCreate()
```

### 关键步骤

```java
// 1. 检查权限和 Intent
// 2. 创建 ActivityRecord
// 3. 检查目标进程是否存在
// 4. 如果不存在，启动进程
// 5. 发送启动消息到目标进程
// 6. 目标进程创建 Activity
```

---

## Service启动流程

### 启动流程

```
1. startService()
2. ActivityManagerService.startService()
3. ActiveServices.startServiceLocked()
4. ActiveServices.bringUpServiceLocked()
5. ApplicationThread.scheduleCreateService()
6. ActivityThread.handleCreateService()
7. Service.onCreate()
```

### 绑定流程

```
1. bindService()
2. ActivityManagerService.bindService()
3. ActiveServices.requestServiceBindingLocked()
4. ApplicationThread.scheduleBindService()
5. ActivityThread.handleBindService()
6. Service.onBind()
```

---

## BroadcastReceiver流程

### 注册流程

```
1. registerReceiver()
2. ActivityManagerService.registerReceiver()
3. 保存到 ReceiverList
```

### 发送流程

```
1. sendBroadcast()
2. ActivityManagerService.broadcastIntent()
3. 查找匹配的 Receiver
4. 发送到目标进程
5. ApplicationThread.scheduleReceiver()
6. ActivityThread.handleReceiver()
7. BroadcastReceiver.onReceive()
```

---

## AMS源码分析

### 关键类

```java
// ActivityManagerService：AMS 主类
// ActivityStack：Activity 栈
// ActivityStackSupervisor：栈管理器
// ProcessRecord：进程记录
// ActivityRecord：Activity 记录
```

### 关键方法

```java
// startActivity()：启动 Activity
// startService()：启动 Service
// broadcastIntent()：发送广播
// getRunningAppProcesses()：获取运行进程
```

---

## 面试常见问题

### Q1: AMS 的作用？

**答案：**
- 管理 Activity、Service、BroadcastReceiver
- 管理进程和任务栈
- 系统核心服务

### Q2: Activity 启动流程？

**答案：**
1. startActivity()
2. AMS.startActivity()
3. 检查权限和 Intent
4. 创建或复用进程
5. 发送启动消息
6. ActivityThread 创建 Activity

### Q3: Service 启动流程？

**答案：**
1. startService()
2. AMS.startService()
3. 检查进程是否存在
4. 启动进程（如需要）
5. 创建 Service
6. 调用 onCreate()

### Q4: BroadcastReceiver 流程？

**答案：**
1. 注册：registerReceiver()
2. 发送：sendBroadcast()
3. AMS 查找匹配的 Receiver
4. 发送到目标进程
5. 调用 onReceive()

---

*最后更新：2024年*
