一句话总结:
曾经无所不能的“大管家” AMS,在现代 Android 系统中已“分家”。它将 Activity 和任务栈的管理权交给了新成立的 ActivityTaskManagerService (ATMS),自己则更专注于进程管理。理解这一“权力交接”,是看懂现代 Android 运行机制的关键。
第一篇章:“古典时代”——那个无所不能的“大管家” AMS
在 Android 9.0 及以前的漫长岁月里,AMS 确实是系统的绝对核心,一个大权独揽的“管家”。它的职责几乎涵盖了应用层的所有动态行为,正如你的文章所出色描述的:
- 四大核心职责: 应用生命周期、进程管理、任务栈、权限控制。
- 五级进程模型: 前台、可见、服务、后台、空进程,以及基于此的 LRU 回收策略。
- 协同各方: 与
WMS(窗口管理)、PMS(包管理) 通过 Binder 紧密协作。
这个经典的、单一核心的 AMS 模型,为我们理解 Android 的基础运行原理打下了坚实的基础。但随着系统变得日益复杂,这位“大管家”也变得不堪重负。
第二篇章:范式革命——为什么“大管家”要“分家”?
从 Android 10 开始,Google 对 AMS 进行了大刀阔斧的架构重构。其核心动机源于现代软件工程思想:
- 解耦: 将 UI 导航(Activity 管理)与后台资源(进程管理)这两个高度复杂但关联性应更低的领域分开。
- 安全: 缩小单个服务的权限范围,提升系统安全性。
- 可维护性与可更新性: 职责更单一的服务,更易于独立测试、维护和通过 Project Mainline 进行更新。
第三篇章:现代 Android 的“董事会”——全新的职责划分
“分家”之后,原 AMS 的权力被重新分配,形成了一个协同工作的“董事会”。
1. ActivityManagerService (AMS) — “人力资源与基础设施总监”
-
核心职责:
- 进程管理 (Process Management): 这仍然是 AMS 的绝对核心。它负责应用的进程创建(通过 Zygote)、销毁、优先级判定和 OOM Killing。它维护着系统的 LRU 进程列表。
Service管理: 负责Service的启动、绑定和生命周期。Broadcast管理: 负责广播的分发。ContentProvider管理: 管理ContentProvider的生命周期。
-
现在的定位: 更偏向于一个后台资源管理者。
2. ActivityTaskManagerService (ATMS) — “首席运营官 (COO),主管前台业务”
-
核心职责:
- Activity 生命周期管理: 所有
Activity的onCreate,onResume,onPause等状态流转,现在都由 ATMS 负责调度。 - 任务栈 (Task) 与返回栈 (Back Stack) 管理:
Activity的组织、排序、切换以及用户按返回键的逻辑,完全由 ATMS掌控。 - 启动模式 (Launch Mode) 处理:
standard,singleTop等复杂的启动行为由 ATMS 解析和执行。
- Activity 生命周期管理: 所有
-
现在的定位: 前台界面导航和状态的最高管理者,与
WMS合作极为紧密。
四、用现代视角,重走一次 Activity 启动流程
当用户点击图标时,一场由“董事会”协同指挥的戏剧上演了:
Launcher->ATMS: Launcher 通过 Binder 通知 ATMS:“用户想启动 MainActivity”。ATMS内部决策: ATMS 检查权限、解析启动模式、确定目标任务栈。ATMS->AMS: ATMS 发现目标应用的进程不存在,于是通过内部接口请求 AMS:“请为这个应用启动一个进程”。AMS->Zygote: AMS 作为“人事总监”,执行它的核心职责,命令Zygotefork一个新进程。ActivityThread->AMS: 新进程的ActivityThread启动后,通过 Binder 向 AMS “报道”,注册自己。AMS->ATMS: AMS 通知 ATMS:“进程已准备就绪”。ATMS->ActivityThread: ATMS 作为“运营总监”,正式下达指令:“现在,请创建并启动你的 MainActivity”。ActivityThread->WMS: Activity 窗口创建后,会向WMS(窗口总监)注册,请求一块显示区域。
结论: 在现代系统中,AMS 不再直接指挥 Activity 的创建,而是退居幕后,成为了一个被 ATMS 调用的、更底层的**“进程提供者”**。
五、总结:从“管家”到“董事会”的演进
| 职责 | 经典模型 (Android 9 及以前) | 现代模型 (Android 10 及以后) |
|---|---|---|
| Activity/任务栈管理 | AMS | ATMS (ActivityTaskManagerService) |
| 进程管理 | AMS | AMS (核心职责保留) |
| Service/Broadcast 管理 | AMS | AMS (逐步模块化中) |
| 启动流程主导者 | AMS | ATMS (AMS 变为被调用方) |
理解从“大管家” AMS 到“董事会”协同治理的演变,不仅是了解一个技术细节的更新,更是洞察整个 Android Framework 模块化、精细化、高内聚架构演进方向的钥匙。