Files
mkdocs/docs/android面试/系统原理/AMS原理.md
2026-01-15 11:53:37 +08:00

3.3 KiB
Raw Blame History

AMS原理

目录


AMS架构

AMS 简介

// AMSActivity Manager Service
// 管理 Activity、Service、BroadcastReceiver 等组件
// 系统服务,运行在 system_server 进程

AMS 职责

// 1. Activity 生命周期管理
// 2. Service 生命周期管理
// 3. BroadcastReceiver 管理
// 4. 进程管理
// 5. 任务栈管理

Activity启动流程

启动流程

1. startActivity()
2. ActivityManagerService.startActivity()
3. ActivityStackSupervisor.startActivityLocked()
4. ActivityStack.startActivityLocked()
5. ActivityStack.resumeTopActivityLocked()
6. ActivityStackSupervisor.realStartActivityLocked()
7. ApplicationThread.scheduleLaunchActivity()
8. ActivityThread.handleLaunchActivity()
9. Activity.onCreate()

关键步骤

// 1. 检查权限和 Intent
// 2. 创建 ActivityRecord
// 3. 检查目标进程是否存在
// 4. 如果不存在,启动进程
// 5. 发送启动消息到目标进程
// 6. 目标进程创建 Activity

Service启动流程

启动流程

1. startService()
2. ActivityManagerService.startService()
3. ActiveServices.startServiceLocked()
4. ActiveServices.bringUpServiceLocked()
5. ApplicationThread.scheduleCreateService()
6. ActivityThread.handleCreateService()
7. Service.onCreate()

绑定流程

1. bindService()
2. ActivityManagerService.bindService()
3. ActiveServices.requestServiceBindingLocked()
4. ApplicationThread.scheduleBindService()
5. ActivityThread.handleBindService()
6. Service.onBind()

BroadcastReceiver流程

注册流程

1. registerReceiver()
2. ActivityManagerService.registerReceiver()
3. 保存到 ReceiverList

发送流程

1. sendBroadcast()
2. ActivityManagerService.broadcastIntent()
3. 查找匹配的 Receiver
4. 发送到目标进程
5. ApplicationThread.scheduleReceiver()
6. ActivityThread.handleReceiver()
7. BroadcastReceiver.onReceive()

AMS源码分析

关键类

// ActivityManagerServiceAMS 主类
// ActivityStackActivity 栈
// ActivityStackSupervisor栈管理器
// ProcessRecord进程记录
// ActivityRecordActivity 记录

关键方法

// startActivity():启动 Activity
// startService():启动 Service
// broadcastIntent():发送广播
// getRunningAppProcesses():获取运行进程

面试常见问题

Q1: AMS 的作用?

答案:

  • 管理 Activity、Service、BroadcastReceiver
  • 管理进程和任务栈
  • 系统核心服务

Q2: Activity 启动流程?

答案:

  1. startActivity()
  2. AMS.startActivity()
  3. 检查权限和 Intent
  4. 创建或复用进程
  5. 发送启动消息
  6. ActivityThread 创建 Activity

Q3: Service 启动流程?

答案:

  1. startService()
  2. AMS.startService()
  3. 检查进程是否存在
  4. 启动进程(如需要)
  5. 创建 Service
  6. 调用 onCreate()

Q4: BroadcastReceiver 流程?

答案:

  1. 注册registerReceiver()
  2. 发送sendBroadcast()
  3. AMS 查找匹配的 Receiver
  4. 发送到目标进程
  5. 调用 onReceive()

最后更新2024年