Android Framework 专项 - AMS 学习路线指南

ActivityManagerService (AMS) 是 Android Framework 中最核心、最庞大的系统服务。设计一套科学的 AMS 学习路线,建议遵循“从宏观到微观,从模型到流程”的原则。


第一阶段:夯实底座(前置必备知识)

在直接阅读 AMS 源码前,必须先掌握 Android 的 IPC 机制和基础通信模型。

模块 关键考点 学习目的
Binder 机制 mmap、AIDL 通信、Stub/Proxy 模式 理解 App 进程如何跨进程调用系统服务。
Handler 机制 Looper 循环、MessageQueue、同步屏障 理解 ActivityThread 如何接收并处理来自 AMS 的指令。
Zygote 进程 Fork 机制、AppRuntime 启动 理解 Android 进程是如何被孵化出来的。

第二阶段:数据模型(理解“三驾马车”)

不要一上来就跟代码流程,先理解 AMS 是如何通过对象来描述 Activity 运行状态的。

核心类 职责描述 对应现实模型
ActivityRecord 记录单个 Activity 的所有状态(Intent, State, TaskAffinity)。 个人档案
TaskRecord 任务栈,管理一组相关的 ActivityRecord。 文件夹
ActivityStack 管理 TaskRecord 的集合(在 Android 10+ 已被 Task 取代)。 文件柜
ProcessRecord 描述应用进程信息(UID, PID, 包含的所有组件)。 容器

第三阶段:核心流程(模拟启动链路)

这是 AMS 最具挑战性的部分,建议分阶段拆解 startActivity 的完整生命周期。

学习步骤 核心关键点 推荐工具
1. 进程内调用 ContextImpl -> Instrumentation -> ATMS 代理。 静态代码追踪
2. 栈管理逻辑 判断启动模式 (LaunchMode)、计算目标 Task、处理 Flag。 dumpsys activity
3. 进程创建 AMS 发现进程不存在 -> 请求 Zygote -> 进程启动。 Logcat 过滤线程 ID
4. 事务分发 ClientTransaction 封装、TransactionExecutor 执行回调。 事务断点调试

第四阶段:进阶与演进(现代架构分析)

了解 AMS 的现代演进,特别是 Android 10+ 的重大变化。

进阶专题 核心内容 学习意义
AMS 与 ATMS 拆分 职责分离原理、进程管理与组件管理的分离。 适配 API 29+ 源码。
多窗口与折叠屏 DisplayContent、多焦点管理逻辑。 掌握现代 UI 架构适配原理。
OOM Adj 算法 进程优先级(Cached, Empty, Visible)的动态调节。 性能优化与后台存活研究。

💡 学习建议:

  1. 不要迷失在细节里:AMS 的代码量极大,初期应以“理清调用时序图”为主,忽略细枝末节的逻辑判断。
  2. 多用 dumpsys:运行 adb shell dumpsys activity activities 可以实时查看当前的栈结构,将抽象的对象可视化。
  3. 对照版本:Android 10 之后的 startActivity 逻辑基本都在 ATMS 中,阅读源码时务必注意系统版本。
, ,