AMS 的初始化流程与核心数据结构

AMS(ActivityManagerService)作为 Android 框架层的核心服务,其初始化过程贯穿 SystemServer 启动阶段,涉及复杂的环境配置与数据结构构建,为后续应用管理奠定基础。


AMS 的初始化始于 SystemServer 的 startBootstrapServices() 方法,主要分为三个阶段:


  1. 实例创建与基础配置:通过 ActivityManagerService.Lifecycle.startService() 创建 AMS 实例,初始化内部锁机制(如 mServiceLock 用于线程同步),设置系统上下文(mContext),并注册到 ServiceManager(Binder 服务名为 “activity”),使其他进程可通过 Binder 调用其接口。
  2. 核心组件初始化:创建 ActivityTaskManagerService(ATMS,Android 10 后从 AMS 拆分,专注任务栈管理)、ProcessRecordList(进程记录表)、TaskRecord(任务栈数据结构)等关键组件;初始化 AppOpsService(应用操作权限管理)与 UsageStatsService(应用使用统计),并与 PMS(PackageManagerService)建立通信,获取应用安装信息。
  3. 策略与规则配置:加载进程优先级规则(如前台进程、可见进程、后台进程的内存回收策略),设置 Activity 启动模式(standard、singleTop 等)的处理逻辑,初始化 ActivityStackSupervisor(栈管理监听器),并启动 Watchdog 监控线程(检测 AMS 卡死)。


AMS 依赖多个核心数据结构实现功能:


  • ProcessRecord:记录应用进程信息,包括 PID、UID、进程名、状态(如前台 / 后台)、关联的 Activity 与 Service 列表,是 AMS 进行进程管理与资源调度的基础。
  • ActivityRecord:描述单个 Activity 实例,包含组件信息(ComponentName)、生命周期状态(如 RESUMED、PAUSED)、所在任务栈(TaskRecord)、窗口信息(WindowState)等,用于跟踪 Activity 状态变化。
  • TaskRecord:代表一个任务栈,存储一系列相关 ActivityRecord(如浏览器打开的多个页面),维护 Activity 跳转顺序,支持 “返回” 操作与任务切换(如近期任务列表)。
  • ActivityStack:管理多个 TaskRecord,按显示优先级组织(如全屏应用栈、对话框栈),决定任务的显示与隐藏逻辑。


AMS 初始化完成后,系统具备了管理应用进程、Activity 生命周期与任务栈的能力,为接收用户操作(如启动应用)做好准备。其数据结构设计体现了 “状态跟踪” 与 “层级管理” 的核心思想,确保多任务环境下的有序运行。

第 3 篇:AMS 对 Activity 生命周期的管理机制