AMS 对 Activity 生命周期的管理机制

Activity 生命周期是 Android 应用开发的基础,而 AMS(ActivityManagerService)是生命周期回调的 “决策者”,通过跨进程通信与状态机管理,确保 Activity 从创建到销毁的每个阶段按规则执行,维持应用与系统状态的一致性。

生命周期管理的核心流程

当用户触发 Activity 切换(如启动新 Activity 或按下返回键)时,AMS 执行以下关键步骤:


  1. 状态判断与请求分发:AMS 接收启动请求(如 startActivity()),根据当前 Activity 状态(如是否在前台)、启动模式(如 singleTask)与任务栈规则,决定是否创建新实例或复用已有实例。
  2. 生命周期回调触发:通过 Binder 通知应用进程的 ActivityThread,按顺序触发前一个 Activity 的暂停(onPause())、新 Activity 的创建(onCreate())、启动(onStart())、恢复(onResume()),最后触发前一个 Activity 的停止(onStop())。此过程严格遵循 “先暂停旧 Activity,再启动新 Activity” 的原则,确保用户体验连贯。
  3. 状态同步与记录:AMS 更新 ActivityRecord 中的状态标识(如从 INITIALIZING 变为 RESUMED),并同步至 TaskRecord 与 ActivityStack,确保系统对 Activity 状态的认知与应用实际状态一致。

跨进程通信与同步机制

AMS 与应用进程的通信依赖 Binder 机制:


  • AMS 作为服务端,通过 IActivityManager 接口暴露生命周期管理方法(如 startActivity()pauseActivity())。
  • 应用进程的 ActivityThread 作为客户端,通过 ActivityManagerNative.getDefault() 获取 AMS 代理,发送状态变化请求;同时,应用进程通过 IApplicationThread 接口向 AMS 反馈本地生命周期执行结果(如 onCreate() 完成)。


为避免多线程冲突,AMS 采用多重同步机制:


  • 锁机制:通过 mServiceLock 同步对 ActivityRecordTaskRecord 等数据结构的修改。
  • 事务屏障:使用 Handler 消息队列的屏障机制(postSyncBarrier()),确保生命周期关键消息(如 resume)优先于普通消息执行,避免时序混乱。

异常场景的生命周期处理

当系统资源不足(如内存紧张)或应用崩溃时,AMS 会主动干预生命周期:


  • 进程回收:优先终止后台 Activity 所在进程,触发 onSaveInstanceState() 保存状态,待后续重建时通过 onRestoreInstanceState() 恢复数据。
  • 崩溃恢复:若前台 Activity 崩溃,AMS 会重启应用进程并重建 Activity,或根据 android:process 配置决定是否启动新进程。


AMS 对生命周期的管理体现了 “集中控制” 与 “分布式执行” 的结合:系统层统一决策,应用层具体执行,通过严格的时序与同步机制,保障多 Activity 交互时的稳定性与一致性。