资讯动态

android AMS 详解

发布时间:2026/8/15 18:43:03 来源:尧图企业网站定制
Android AMSActivity Manager Service详解一、AMS 是什么AMSActivity Manager Service是 Android 系统中最核心的服务之一负责管理四大组件Activity、Service、BroadcastReceiver、ContentProvider的生命周期和调度以及进程管理、任务栈管理、权限检查等。它运行在system_server进程中是 Framework 层的核心服务。二、AMS 的核心职责职责说明Activity 管理启动、暂停、恢复、销毁 Activity管理任务栈和返回栈Service 管理启动、绑定、解绑、停止 ServiceBroadcast 管理发送、接收有序/无序广播进程管理启动新进程、回收低优先级进程LRU 列表任务栈管理管理 Task 和 Activity 的启动模式权限检查验证调用者是否有权限执行操作ANR 检测监控主线程响应超时三、AMS 的架构位置┌─────────────────────────────────────┐ │ 应用层 (App) │ ├─────────────────────────────────────┤ │ ActivityManager (Java API) │ ├─────────────────────────────────────┤ │ ActivityManagerNative (AIDL) │ ├─────────────────────────────────────┤ │ ActivityManagerService (system_server) │ │ ├─ ActivityStackSupervisor │ │ ├─ ActivityStack │ │ ├─ ProcessRecord │ │ └─ ... │ ├─────────────────────────────────────┤ │ Zygote 进程孵化 │ ├─────────────────────────────────────┤ │ Linux Kernel │ └─────────────────────────────────────┘四、核心类与数据结构1. ActivityManagerServiceAMS 的主类继承自IActivityManager.Stub通过 Binder 暴露服务接口。2. ActivityStackSupervisor管理所有 Activity 栈的调度器Android 4.4 引入用于支持多窗口和多用户。3. ActivityStack管理一个任务栈维护ActivityRecord列表。4. ActivityRecord代表一个 Activity 实例包含infoActivityInfomanifest 信息task所属的 TaskRecordstate当前状态INITIALIZING、RESUMED、PAUSED 等app绑定的 ProcessRecord5. TaskRecord代表一个任务Task包含多个 ActivityRecord。6. ProcessRecord代表一个运行中的进程包含pid进程 IDuid用户 IDthread应用主线程的 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前台 ActivityVISIBLE_APP1可见但不可交互PERCEPTIBLE_APP2可感知前台 Service、音乐播放等BACKUP_APP3备份进程HEAVY_WEIGHT_APP4重量级后台SERVICE5后台 ServiceHOME_APP6Home 进程PREVIOUS_APP7上一个前台应用SERVICE_B8长时间运行的 ServiceCACHED_APP9缓存进程空进程AMS 维护LRULeast Recently Used列表当内存不足时按优先级从低到高回收进程。七、启动模式LaunchModeAMS 通过launchMode和Intent Flag控制 Activity 的启动行为模式说明standard每次启动都创建新实例singleTop栈顶复用否则新建singleTask栈内复用清空其上所有 ActivitysingleInstance独占一个任务栈AMS 内部通过ActivityStarter.computeLaunchingTaskFlags()计算最终启动标志。八、ANR 检测机制AMS 在以下场景检测 ANRService ANRServiceTimeout前台 20s后台 200sBroadcast ANRBroadcastTimeout前台 10s后台 60sInput ANR输入事件 5s 未处理ContentProvider ANR发布超时 10s实现原理AMS 通过Handler发送延迟消息若超时前未收到完成回调则触发 ANR。九、AMS 初始化流程system_server启动时初始化 AMSjava// 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 │ │ (进程孵化) │ │ (电池管理) │ │ (权限管理) │ └─────────────┘ └─────────────┘ └─────────────┘

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价