首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Android AMS和WMS机制原理入门讲解。

  • 25-04-16 15:40
  • 4680
  • 11345
juejin.cn

AMS(ActivityManagerService)和 WMS(WindowManagerService)是 Android 系统中两个核心的系统服务,分别负责管理应用组件(如 Activity)和窗口系统。以下是它们的机制和原理的详细说明:

一. AMS(ActivityManagerService)

AMS 是 Android 系统中负责管理应用组件生命周期和任务栈的核心服务。它运行在 system_server 进程中,是 Android 框架层的重要组成部分。

主要职责:

  1. 管理 Activity 生命周期:

    • 负责启动、暂停、恢复、停止和销毁 Activity。
    • 通过 ActivityStack 管理 Activity 的任务栈。
  2. 管理应用进程:

    • 启动和销毁应用进程。
    • 监控应用进程的状态(如内存使用情况)。
  3. 管理任务栈(Task Stack) :

    • 维护 Activity 的任务栈,确保 Activity 按照正确的顺序显示。
    • 处理任务栈的切换和回退(如按下返回键)。
  4. 权限管理:

    • 检查应用是否具有执行某些操作的权限(如启动 Activity、访问服务等)。
  5. 广播管理:

    • 管理广播的发送和接收。
  6. 服务管理:

    • 管理服务的启动、绑定和销毁。

工作机制:

  • Activity 启动流程:

    1. 应用通过 startActivity 请求启动一个 Activity。
    2. AMS 接收到请求后,检查目标 Activity 的权限和启动模式。
    3. AMS 创建或复用目标 Activity 的进程。
    4. AMS 通知目标进程的 ActivityThread 创建并启动目标 Activity。
    5. AMS 更新任务栈,并将目标 Activity 置于栈顶。
  • 进程管理:

    • AMS 通过 ProcessRecord 记录每个应用进程的状态。
    • 当系统内存不足时,AMS 会根据优先级(如前台进程、可见进程等)决定是否杀死某些进程。
  • 任务栈管理:

    • AMS 使用 ActivityStack 和 TaskRecord 管理 Activity 的任务栈。
    • 每个任务栈包含一组相关的 Activity,用户可以通过返回键在栈中导航。

二. WMS(WindowManagerService)

WMS 是 Android 系统中负责管理窗口和显示的核心服务。它运行在 system_server 进程中,与 SurfaceFlinger 协作,负责将应用的 UI 渲染到屏幕上。

主要职责:

  1. 管理窗口:

    • 负责创建、销毁和调整窗口。
    • 管理窗口的层级(Z-order)和可见性。
  2. 处理输入事件:

    • 将触摸事件、按键事件等分发给正确的窗口。
  3. 管理 Surface:

    • 与 SurfaceFlinger 协作,为每个窗口分配 Surface。
    • 管理 Surface 的绘制和合成。
  4. 管理动画:

    • 处理窗口的过渡动画(如 Activity 切换动画)。
  5. 管理屏幕旋转:

    • 处理屏幕旋转时的窗口布局调整。

工作机制:

  • 窗口创建流程:

    1. 应用通过 WindowManager 请求创建一个窗口。
    2. WMS 接收到请求后,为窗口分配 Surface。
    3. WMS 将窗口添加到窗口树中,并确定其层级和可见性。
    4. WMS 通知 SurfaceFlinger 创建对应的 Surface。
    5. 应用通过 Surface 进行 UI 绘制。
  • 输入事件分发:

    1. 输入事件(如触摸事件)由输入系统生成并发送到 WMS。
    2. WMS 根据窗口的层级和位置确定目标窗口。
    3. WMS 将事件分发给目标窗口的 ViewRootImpl。
    4. ViewRootImpl 将事件传递给目标 View 进行处理。
  • Surface 管理:

    • WMS 为每个窗口分配一个 Surface,用于 UI 绘制。
    • WMS 与 SurfaceFlinger 协作,将多个 Surface 合成为最终的屏幕图像。

三. AMS 和 WMS 的协作

AMS 和 WMS 在 Android 系统中紧密协作,共同完成应用的显示和交互。

协作场景:

  1. Activity 启动:

    • AMS 负责启动 Activity 并管理其生命周期。
    • WMS 负责为 Activity 创建窗口并管理其显示。
  2. 窗口切换:

    • 当用户切换到另一个 Activity 时,AMS 更新任务栈。
    • WMS 调整窗口的层级和可见性,并处理过渡动画。
  3. 输入事件处理:

    • WMS 将输入事件分发给当前活动的窗口。
    • AMS 确保目标 Activity 处于活动状态。
  4. 屏幕旋转:

    • AMS 通知 Activity 重新创建。
    • WMS 调整窗口的布局和 Surface。

四. 关键数据结构

AMS:

  • ActivityRecord:记录一个 Activity 的信息。
  • TaskRecord:记录一个任务栈的信息。
  • ProcessRecord:记录一个应用进程的信息。
  • ActivityStack:管理 Activity 的任务栈。

WMS:

  • WindowState:记录一个窗口的状态。
  • WindowToken:标识一组相关的窗口。
  • DisplayContent:管理一个屏幕上的所有窗口。
  • Surface:用于窗口的 UI 绘制。

五. 总结

特性AMS(ActivityManagerService)WMS(WindowManagerService)
主要职责管理 Activity 生命周期、任务栈、进程管理窗口、输入事件、Surface、动画
协作对象应用进程、ActivityThreadSurfaceFlinger、输入系统
关键数据结构ActivityRecord、TaskRecord、ProcessRecordWindowState、WindowToken、Surface
典型场景Activity 启动、任务栈管理窗口创建、输入事件分发、屏幕旋转

AMS 和 WMS 是 Android 系统的核心服务,分别负责应用组件和窗口系统的管理。它们通过紧密协作,确保应用的正常运行和用户的交互体验。理解它们的机制和原理,有助于更好地开发和调试 Android 应用。

更多分享

  1. Android Jetpack相关面试题分享(一)
  2. Android Jetpack原理相关面试题分享(二)
  3. Android Kotlin协程相关面试题分享
  4. Android 架构以及优化相关面试题分享
注:本文转载自juejin.cn的QING618的文章"https://juejin.cn/post/7475504940652740608"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top