Android系统服务WMS

1、概述

WindowManagerService服务简称WMS,管理整个系统的所有窗口UI。

Activity与Window:

  • Activity只负责生命周期和事件处理。
  • Window主要是管理View创建,以及与ViewRootImpl交互,将Activity与View解耦。
  • 一个Activity包含一个Window(即PhoneWindow),一个PhoneWindow持有一个DecorView(本身是一个FrameLayout)实例。
  • 如果Activity没有Window,那就相当于Service。

Activity、PhoneWindow、DecorView关系图

Android系统服务WMS

2、作用

  • 为所有窗口分配Surface。客户端向WMS添加一个窗口的过程,其实就是WMS为其分配一块Surface的过程,一块块Surface在WMS的管理下有序的排布在屏幕上。Window的本质就是Surface。
  • 管理Surface的显示顺序、尺寸、位置
  • 管理窗口动画
  • 输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息,而WMS是窗口的管理者,系统中所有的窗口状态和信息都在其掌握之中,完成这一工作不在话下。

3、核心源码

4、总结

Q:WMS是系统服务,有SystemServer负责启动,启动时机相对较晚,那么在WMS运行之前,终端显示屏就一团黑?

A:在WMS启动之前,系统只需显示开机动画,它们都有特殊的方式来向屏幕输出图像,比如直接通过OpenGL ES与SurfaceFling的配合来完成。这也从侧面告诉我们,要想在Android上显示UI,并不一定要通过WMS。