AMS
(ActivityManagerService)和 WMS
(WindowManagerService)是 Android 系统中两个核心的系统服务,分别负责管理应用组件(如 Activity)和窗口系统。以下是它们的机制和原理的详细说明:
一. AMS(ActivityManagerService)
AMS
是 Android 系统中负责管理应用组件生命周期和任务栈的核心服务。它运行在 system_server
进程中,是 Android 框架层的重要组成部分。
主要职责:
-
管理 Activity 生命周期:
- 负责启动、暂停、恢复、停止和销毁 Activity。
- 通过
ActivityStack
管理 Activity 的任务栈。
-
管理应用进程:
- 启动和销毁应用进程。
- 监控应用进程的状态(如内存使用情况)。
-
管理任务栈(Task Stack) :
- 维护 Activity 的任务栈,确保 Activity 按照正确的顺序显示。
- 处理任务栈的切换和回退(如按下返回键)。
-
权限管理:
- 检查应用是否具有执行某些操作的权限(如启动 Activity、访问服务等)。
-
广播管理:
- 管理广播的发送和接收。
-
服务管理:
- 管理服务的启动、绑定和销毁。
工作机制:
-
Activity 启动流程:
- 应用通过
startActivity
请求启动一个 Activity。 AMS
接收到请求后,检查目标 Activity 的权限和启动模式。AMS
创建或复用目标 Activity 的进程。AMS
通知目标进程的ActivityThread
创建并启动目标 Activity。AMS
更新任务栈,并将目标 Activity 置于栈顶。
- 应用通过
-
进程管理:
AMS
通过ProcessRecord
记录每个应用进程的状态。- 当系统内存不足时,
AMS
会根据优先级(如前台进程、可见进程等)决定是否杀死某些进程。
-
任务栈管理:
AMS
使用ActivityStack
和TaskRecord
管理 Activity 的任务栈。- 每个任务栈包含一组相关的 Activity,用户可以通过返回键在栈中导航。
二. WMS(WindowManagerService)
WMS
是 Android 系统中负责管理窗口和显示的核心服务。它运行在 system_server
进程中,与 SurfaceFlinger 协作,负责将应用的 UI 渲染到屏幕上。
主要职责:
-
管理窗口:
- 负责创建、销毁和调整窗口。
- 管理窗口的层级(Z-order)和可见性。
-
处理输入事件:
- 将触摸事件、按键事件等分发给正确的窗口。
-
管理 Surface:
- 与 SurfaceFlinger 协作,为每个窗口分配 Surface。
- 管理 Surface 的绘制和合成。
-
管理动画:
- 处理窗口的过渡动画(如 Activity 切换动画)。
-
管理屏幕旋转:
- 处理屏幕旋转时的窗口布局调整。
工作机制:
-
窗口创建流程:
- 应用通过
WindowManager
请求创建一个窗口。 WMS
接收到请求后,为窗口分配 Surface。WMS
将窗口添加到窗口树中,并确定其层级和可见性。WMS
通知 SurfaceFlinger 创建对应的 Surface。- 应用通过 Surface 进行 UI 绘制。
- 应用通过
-
输入事件分发:
- 输入事件(如触摸事件)由输入系统生成并发送到
WMS
。 WMS
根据窗口的层级和位置确定目标窗口。WMS
将事件分发给目标窗口的ViewRootImpl
。ViewRootImpl
将事件传递给目标 View 进行处理。
- 输入事件(如触摸事件)由输入系统生成并发送到
-
Surface 管理:
WMS
为每个窗口分配一个 Surface,用于 UI 绘制。WMS
与 SurfaceFlinger 协作,将多个 Surface 合成为最终的屏幕图像。
三. AMS 和 WMS 的协作
AMS
和 WMS
在 Android 系统中紧密协作,共同完成应用的显示和交互。
协作场景:
-
Activity 启动:
AMS
负责启动 Activity 并管理其生命周期。WMS
负责为 Activity 创建窗口并管理其显示。
-
窗口切换:
- 当用户切换到另一个 Activity 时,
AMS
更新任务栈。 WMS
调整窗口的层级和可见性,并处理过渡动画。
- 当用户切换到另一个 Activity 时,
-
输入事件处理:
WMS
将输入事件分发给当前活动的窗口。AMS
确保目标 Activity 处于活动状态。
-
屏幕旋转:
AMS
通知 Activity 重新创建。WMS
调整窗口的布局和 Surface。
四. 关键数据结构
AMS:
- ActivityRecord:记录一个 Activity 的信息。
- TaskRecord:记录一个任务栈的信息。
- ProcessRecord:记录一个应用进程的信息。
- ActivityStack:管理 Activity 的任务栈。
WMS:
- WindowState:记录一个窗口的状态。
- WindowToken:标识一组相关的窗口。
- DisplayContent:管理一个屏幕上的所有窗口。
- Surface:用于窗口的 UI 绘制。
五. 总结
特性 | AMS(ActivityManagerService) | WMS(WindowManagerService) |
---|---|---|
主要职责 | 管理 Activity 生命周期、任务栈、进程 | 管理窗口、输入事件、Surface、动画 |
协作对象 | 应用进程、ActivityThread | SurfaceFlinger、输入系统 |
关键数据结构 | ActivityRecord、TaskRecord、ProcessRecord | WindowState、WindowToken、Surface |
典型场景 | Activity 启动、任务栈管理 | 窗口创建、输入事件分发、屏幕旋转 |
AMS
和 WMS
是 Android 系统的核心服务,分别负责应用组件和窗口系统的管理。它们通过紧密协作,确保应用的正常运行和用户的交互体验。理解它们的机制和原理,有助于更好地开发和调试 Android 应用。
评论记录:
回复评论: