AMS 与 ATMS 是什么,谁在真正管理 Activity
2026/7/23大约 3 分钟AMS 生命周期Android 14AMSATMSActivity
AMS 与 ATMS 是什么,谁在真正管理 Activity
调用 startActivity() 后,onCreate() 并不是由 AMS 直接执行。Android 14 把这条链拆成三段: ATMS 处理 Activity 与 Task 的组织,AMS 保证目标进程可用,应用主线程执行组件生命周期。 窗口是否最终可见,则继续由 WMS、应用绘制和 SurfaceFlinger 合作完成;窗口侧主线见 WMS 是什么,为什么 Android 需要窗口管理员。
不要再用“AMS 启动 Activity”概括整条链
| 常见误解 | 正确理解 |
|---|---|
| “AMS 启动 Activity”就是全部答案 | Android 14 中 Activity 与 Task 的组织由 ATMS 负责,AMS 更侧重进程、服务和系统状态 |
| AMS 和 ATMS 是两个互不相关的服务 | 它们在 system_server 中共用状态,由 SystemServer 先后创建并协作 |
老版本资料常把 Activity 启动统一归入 AMS。Android 14 中应拆成三段:ATMS 决策 Activity 与 Task,AMS 建立或管理进程,应用主线程执行组件生命周期。
点击图标后,ATMS 决定“放哪、怎么启动”,AMS 决定“进程是否在岗、如何分配资源”,真正 执行 onCreate() 的是目标应用自己的主线程。
两个服务的职责分工
| 服务 | 管理对象 | 典型动作 | 本章结论 |
|---|---|---|---|
| ATMS | Activity、Task、任务栈、窗口容器 | startActivity()、Task 归属、生命周期事务 | 决定“Activity 如何被组织” |
| AMS | 进程、Service、Broadcast、Provider | startProcessLocked()、attachApplication()、进程优先级 | 决定“进程是否在岗、如何存活” |
| WMS | WindowState、窗口层级 | 加窗、布局、焦点 | 决定“窗口如何显示” |
| 应用主线程 | ActivityThread、View | performLaunchActivity()、onCreate | 真正执行组件代码 |
生命周期总图
逐步解释:
- ① App 入口:Activity 调用
startActivity(),经 Instrumentation 组装请求。 - ② Binder 入口:请求到达 ATMS 的
startActivity(),第一次跨进程。 - ③ 启动决策:ActivityStarter 解析 Intent、判断任务归属。
- ④ 对象落地:创建 ActivityRecord 并加入 Task。
- ⑤ 进程确认:AMS 查目标进程是否已存在。
- ⑥ 进程创建:不存在时经 Zygote fork 新进程。
- ⑦ 事务下发:新进程 attach 后,系统下发客户端事务。
- ⑧ 应用执行:ActivityThread 在主线程执行 onCreate/onResume。
- ⑨ 窗口衔接:Activity 可见窗口进入 WMS 系列的主线。
从现象认识职责
| 可观察现象 | 对应职责 | 排查方向 |
|---|---|---|
| 点击图标无反应 | 启动决策 | ActivityStarter 返回码 |
| 冷启动慢 | 进程创建 | Zygote 与进程启动时序 |
| Activity 没走到 onResume | 生命周期事务 | ClientTransaction 执行日志 |
| 应用被杀、回到桌面 | 进程优先级 | oom_adj 与 LMK |
| 前台 Activity 被误杀 | 进程优先级 | 检查 adj 与内存压力 |
| 界面没显示但有 onResume | 窗口链路 | 交给 WMS 系列 |
源码入口
进程创建之前的 Zygote 基础可对照Zygote 如何孵化 system_server。
源码基准:android-14.0.0_r75。
以下文件默认位于 frameworks/base/,表中省略该前缀:
| 文件 | 关键位置 | 作用 |
|---|---|---|
services/core/java/com/android/server/am/ActivityManagerService.java | 530 行 class ActivityManagerService extends IActivityManager.Stub | AMS 服务端本体 |
services/core/java/com/android/server/wm/ActivityTaskManagerService.java | 323 行 class ActivityTaskManagerService extends IActivityTaskManager.Stub | ATMS 服务端本体 |
| 同文件 | 1222 行 startActivity(...) | Activity 启动 Binder 入口 |
services/core/java/com/android/server/wm/ActivityStarter.java | 715 行 execute() | 启动决策入口 |
core/java/android/app/ActivityThread.java | 3827 行 performLaunchActivity(...) | 应用侧 Activity 创建 |
services/core/java/com/android/server/wm/ActivityRecord.java | 417 行 final class ActivityRecord extends WindowToken | Activity 服务端记录 |