ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

android AMS 详解

2026/8/15 18:49:26 拓冰建站 浏览量
android AMS 详解

Android AMS(Activity Manager Service)详解

一、AMS 是什么

AMS(Activity Manager Service)是 Android 系统中最核心的服务之一,负责管理四大组件(Activity、Service、BroadcastReceiver、ContentProvider)的生命周期和调度,以及进程管理、任务栈管理、权限检查等。

它运行在system_server进程中,是 Framework 层的核心服务。


二、AMS 的核心职责

职责说明
Activity 管理启动、暂停、恢复、销毁 Activity;管理任务栈和返回栈
Service 管理启动、绑定、解绑、停止 Service
Broadcast 管理发送、接收有序/无序广播
进程管理启动新进程、回收低优先级进程(LRU 列表)
任务栈管理管理 Task 和 Activity 的启动模式
权限检查验证调用者是否有权限执行操作
ANR 检测监控主线程响应超时

三、AMS 的架构位置

┌─────────────────────────────────────┐ │ 应用层 (App) │ ├─────────────────────────────────────┤ │ ActivityManager (Java API) │ ├─────────────────────────────────────┤ │ ActivityManagerNative (AIDL) │ ├─────────────────────────────────────┤ │ ActivityManagerService (system_server) │ │ ├─ ActivityStackSupervisor │ │ ├─ ActivityStack │ │ ├─ ProcessRecord │ │ └─ ... │ ├─────────────────────────────────────┤ │ Zygote 进程孵化 │ ├─────────────────────────────────────┤ │ Linux Kernel │ └─────────────────────────────────────┘

四、核心类与数据结构

1. ActivityManagerService

AMS 的主类,继承自IActivityManager.Stub,通过 Binder 暴露服务接口。

2. ActivityStackSupervisor

管理所有 Activity 栈的调度器,Android 4.4 引入,用于支持多窗口和多用户。

3. ActivityStack

管理一个任务栈,维护ActivityRecord列表。

4. ActivityRecord

代表一个 Activity 实例,包含:

  • info:ActivityInfo(manifest 信息)

  • task:所属的 TaskRecord

  • state:当前状态(INITIALIZING、RESUMED、PAUSED 等)

  • app:绑定的 ProcessRecord

5. TaskRecord

代表一个任务(Task),包含多个 ActivityRecord。

6. ProcessRecord

代表一个运行中的进程,包含:

  • pid:进程 ID

  • uid:用户 ID

  • thread:应用主线程的 IApplicationThread Binder 代理

  • activities:该进程中运行的 Activity 列表


五、Activity 启动流程(重点)

startActivity()为例,完整流程如下:

App (调用方) ↓ Binder IPC ActivityManagerService.startActivity() ↓ ActivityStarter.execute() ← Android 7.0+ 将启动逻辑抽离到 ActivityStarter ↓ ActivityStackSupervisor.startSpecificActivityLocked() ↓ 判断目标进程是否存在? ├── 否 → startProcessLocked() → 通过 Zygote fork 新进程 │ → 创建 ApplicationThread → attachApplication() │ └── 是 → 直接使用已有进程 ↓ ActivityStack.startActivityLocked() ↓ ActivityStack.resumeTopActivityInnerLocked() ↓ ActivityStackSupervisor.realStartActivityLocked() ↓ Binder IPC (跨进程调用) ApplicationThread.scheduleLaunchActivity() ← 进入目标 App 进程 ↓ ActivityThread.handleLaunchActivity() ↓ Instrumentation.newActivity() ← 反射创建 Activity 实例 ↓ Activity.attach() ← 创建 PhoneWindow、WindowManager ↓ Activity.onCreate() Activity.onStart() Activity.onResume() ↓ WindowManager.addView() ← 将 DecorView 添加到窗口

六、进程优先级与 LRU 管理

AMS 使用oom_adj值管理进程优先级,值越大越容易被杀死:

优先级oom_adj说明
FOREGROUND_APP0前台 Activity
VISIBLE_APP1可见但不可交互
PERCEPTIBLE_APP2可感知(前台 Service、音乐播放等)
BACKUP_APP3备份进程
HEAVY_WEIGHT_APP4重量级后台
SERVICE5后台 Service
HOME_APP6Home 进程
PREVIOUS_APP7上一个前台应用
SERVICE_B8长时间运行的 Service
CACHED_APP9+缓存进程(空进程)

AMS 维护LRU(Least Recently Used)列表,当内存不足时,按优先级从低到高回收进程。


七、启动模式(LaunchMode)

AMS 通过launchModeIntent Flag控制 Activity 的启动行为:

模式说明
standard每次启动都创建新实例
singleTop栈顶复用,否则新建
singleTask栈内复用,清空其上所有 Activity
singleInstance独占一个任务栈

AMS 内部通过ActivityStarter.computeLaunchingTaskFlags()计算最终启动标志。


八、ANR 检测机制

AMS 在以下场景检测 ANR:

  1. Service ANRServiceTimeout(前台 20s,后台 200s)

  2. Broadcast ANRBroadcastTimeout(前台 10s,后台 60s)

  3. Input ANR:输入事件 5s 未处理

  4. ContentProvider ANR:发布超时 10s

实现原理:AMS 通过Handler发送延迟消息,若超时前未收到完成回调,则触发 ANR。


九、AMS 初始化流程

system_server启动时初始化 AMS:

java

// SystemServer.java private void startBootstrapServices() { // 1. 创建 AMS 实例 mActivityManagerService = mSystemServiceManager.startService( ActivityManagerService.Lifecycle.class).getService(); // 2. 设置系统进程 mActivityManagerService.setSystemProcess(); } private void startOtherServices() { // 3. 安装系统 ContentProvider mActivityManagerService.installSystemProviders(); // 4. 系统就绪 mActivityManagerService.systemReady(() -> { // 启动 Home Activity }); }

十、关键源码路径

文件说明
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javaAMS 主类
frameworks/base/services/core/java/com/android/server/am/ActivityStackSupervisor.java栈管理器
frameworks/base/services/core/java/com/android/server/am/ActivityStack.java任务栈
frameworks/base/services/core/java/com/android/server/am/ActivityStarter.java启动逻辑
frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java进程记录
frameworks/base/services/core/java/com/android/server/am/ActivityRecord.javaActivity 记录
frameworks/base/core/java/android/app/ActivityThread.java应用主线程
frameworks/base/core/java/android/app/Instrumentation.java生命周期回调

十一、AMS 与相关服务的关系

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ AMS │◄───►│ WMS │ │ PMS │ │ (组件调度) │ │ (窗口管理) │ │ (包管理) │ └──────┬──────┘ └─────────────┘ └─────────────┘ │ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Zygote │ │ BMS │ │ PKMS │ │ (进程孵化) │ │ (电池管理) │ │ (权限管理) │ └─────────────┘ └─────────────┘ └─────────────┘