跳到主要内容

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_ACTIVITYPAUSE_ACTIVITY)。ActivityThread 中的 TransactionExecutor 根据事件调用对应的生命周期方法。整个过程是 AMS(系统进程)和 App 进程之间的 Binder 通信。

Q2: App 被系统杀死后如何恢复?

答案

AMS 在杀死进程前保存了 Activity 的 onSaveInstanceState() 数据。用户返回该 App 时,AMS 重新启动进程并恢复 Activity,将保存的 Bundle 传递给 onCreate(savedInstanceState)onRestoreInstanceState()。Task 和 Back Stack 的结构由 AMS 维护,不受进程销毁影响。

相关链接