AMS 活动管理服务
问题
AMS(ActivityManagerService)的职责是什么?
答案
AMS 核心职责
AMS 是 Android 系统最重要的服务之一:
| 职责 | 说明 |
|---|---|
| Activity 管理 | 启动、暂停、销毁 Activity,管理生命周期 |
| Task/Back Stack | 管理任务栈、处理 LaunchMode |
| 进程管理 | 请求 Zygote 创建进程、进程优先级调整、LMK |
| 广播调度 | 管理 BroadcastReceiver 的注册和分发 |
| Service 管理 | 启动、绑定、停止 Service |
| ContentProvider | 管理 ContentProvider 的启动和发布 |
进程优先级(LMK)
AMS 维护进程的优先级(adj 值),Low Memory Killer 根据优先级回收进程:
| 优先级 | OOM adj | 说明 | 回收风险 |
|---|---|---|---|
| 前台进程 | 0 | 用户正在交互的 Activity | 最低 |
| 可见进程 | 100 | 可见但不在前台(如被 Dialog 遮挡) | 低 |
| 服务进程 | 200 | 运行着前台 Service | 中低 |
| 后台进程 | 700 | 进入后台的 Activity(onStop) | 中高 |
| 空进程 | 900 | 无任何活跃组件 | 最高 |
保活策略
提高进程优先级的合法方式:使用 Foreground Service(前台服务)显示持续通知。不推荐使用 1px Activity、互相拉活等黑科技,会被系统限制。
常见面试问题
Q1: AMS 是如何管理 Activity 生命周期的?
答案:
AMS 通过 ActivityRecord 记录每个 Activity 的状态,通过 Binder 向目标进程的 ActivityThread 发送生命周期事件(如 LAUNCH_ACTIVITY、PAUSE_ACTIVITY)。ActivityThread 中的 TransactionExecutor 根据事件调用对应的生命周期方法。整个过程是 AMS(系统进程)和 App 进程之间的 Binder 通信。
Q2: App 被系统杀死后如何恢复?
答案:
AMS 在杀死进程前保存了 Activity 的 onSaveInstanceState() 数据。用户返回该 App 时,AMS 重新启动进程并恢复 Activity,将保存的 Bundle 传递给 onCreate(savedInstanceState) 和 onRestoreInstanceState()。Task 和 Back Stack 的结构由 AMS 维护,不受进程销毁影响。