android 体系 wms详解

打印 上一主题 下一主题

主题 1872|帖子 1872|积分 5616

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在 Android 体系中,WMS(WindowManagerService) 是负责窗口管理的焦点折务。它负责管理所有窗口的创建、布局、绘制、输入变乱分发以及动画等操纵。WMS 是 Android 图形体系和用户交互的紧张组成部分,也是面试中常被问到的知识点。
以下是关于 WMS 的详解与面试常见问题的整理:

一、WMS 的焦点功能


  • 窗口管理
    WMS 负责管理所有窗口(如 Activity、Dialog、Toast 等)的创建、销毁、显示和隐藏。
  • 窗口布局
    WMS 根据窗口的层级(Z-Order)和巨细盘算窗口的最终位置,并关照 SurfaceFlinger 进行合成。
  • 输入变乱分发
    WMS 负责将触摸变乱、按键变乱平分发给准确的窗口。
  • 窗口动画
    WMS 管理窗口的过渡动画(如 Activity 切换动画)。
  • 多窗口支持
    WMS 支持分屏、画中画等多窗口模式。
  • Surface 管理
    WMS 与 SurfaceFlinger 协作,管理每个窗口的 Surface(绘图外貌)。

二、WMS 的启动流程


  • SystemServer 启动 WMS
    Android 体系启动时,SystemServer 会创建 WMS 实例,并注册到 ServiceManager 中。
  • WMS 初始化
    WMS 初始化时会创建 DisplayContent、WindowToken、WindowState 等焦点数据布局。
  • 与 SurfaceFlinger 协作
    WMS 与 SurfaceFlinger 通过 Binder 机制通信,管理窗口的 Surface 和合成。

三、WMS 的关键类与数据布局


  • WindowManagerService
    WMS 的焦点类,负责所有与窗口管理相关的操纵。
  • WindowState
    表示一个窗口的状态,包括窗口的巨细、位置、层级等。
  • WindowToken
    表示一组窗口的令牌(如 Activity 或应用),用于管理窗口的生命周期。
  • DisplayContent
    表示一个显示设备的内容,管理该设备上的所有窗口。
  • SurfaceControl
    表示一个窗口的绘图外貌,与 SurfaceFlinger 协作管理 Surface。
  • InputManagerService
    与 WMS 协作,负责输入变乱的分发。

四、WMS 的交互流程


  • 窗口创建流程

    • 应用通过 WindowManager 添加窗口。
    • WMS 创建 WindowState 并分配 Surface。
    • WMS 关照 SurfaceFlinger 创建 Surface。
    • 应用通过 Surface 进行绘制。

  • 窗口布局流程

    • WMS 根据窗口的层级和巨细盘算布局。
    • WMS 关照 SurfaceFlinger 更新窗口的位置和巨细。

  • 输入变乱分发流程

    • 输入变乱由 InputManagerService 捕获。
    • WMS 根据窗口的位置和层级确定目标窗口。
    • WMS 将变乱分发给目标窗口。

  • 窗口动画流程

    • WMS 根据窗口的过渡范例(如打开、关闭)启动动画。
    • WMS 通过 SurfaceFlinger 实现动画效果。

  • 多窗口管理流程

    • WMS 根据用户操纵(如分屏、画中画)调整窗口的布局。
    • WMS 关照 SurfaceFlinger 更新窗口的显示。


五、WMS 面试常见问题


  • WMS 的作用是什么?
    WMS 负责窗口的创建、布局、绘制、输入变乱分发以及动画等操纵。
  • WMS 如何管理窗口的层级?
    通过 WindowState 的 Z-Order 属性管理窗口的层级,确保窗口按准确的顺序显示。
  • WMS 如那边理输入变乱?
    WMS 与 InputManagerService 协作,根据窗口的位置和层级确定目标窗口,并将变乱分发给目标窗口。
  • WMS 如何实现窗口动画?
    WMS 通过 SurfaceFlinger 实现窗口的过渡动画(如平移、缩放、透明度变革)。
  • WMS 如何支持多窗口模式?
    WMS 根据用户操纵(如分屏、画中画)调整窗口的布局,并关照 SurfaceFlinger 更新显示。
  • WMS 与 SurfaceFlinger 的关系是什么?
    WMS 负责窗口的管理和布局,SurfaceFlinger 负责窗口的合成和显示。
  • WMS 如那边理窗口的 Surface?
    WMS 通过 SurfaceControl 创建和管理窗口的 Surface,并与 SurfaceFlinger 协作实现绘制。
  • WMS 如何优化窗口的绘制性能?
    通过减少不必要的布局盘算、使用硬件加快、优化动画效果等方式提拔性能。
  • WMS 如那边理窗口的焦点切换?
    WMS 根据窗口的层级和用户操纵(如点击)调整焦点窗口,并关照应用更新 UI。
  • WMS 如那边理窗口的非常情况(如 ANR)?
    通过监控窗口的相应时间,如果窗口未及时相应输入变乱,会触发 ANR 弹窗。

六、WMS 相关源码路径



  • WMS 焦点类:frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
  • WindowState:frameworks/base/services/core/java/com/android/server/wm/WindowState.java
  • WindowToken:frameworks/base/services/core/java/com/android/server/wm/WindowToken.java
  • DisplayContent:frameworks/base/services/core/java/com/android/server/wm/DisplayContent.java
  • SurfaceControl:frameworks/base/core/java/android/view/SurfaceControl.java

七、总结

WMS 是 Android 体系的焦点折务之一,掌握其工作原理对于理解 Android 图形体系、用户交互机制至关紧张。在面试中,除了理论知识,面试官大概会联合实际场景(如窗口卡顿、输入变乱丢失)考察候选人的深度理解本事。发起联合 AOSP 源码深入学习 WMS 的实现细节。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表