WMS及其成员

基于Android U

WMS的职责

  1. 窗口管理

WMS是窗口的管理者,它负责窗口的启动、添加和删除,另外窗口的大小和层级也是由WMS进行管理的。窗口管理的核心成员有DisplayContent、WindowToken和WindowState。

  1. 窗口动画

窗口间进行切换时,使用窗口动画可以显得更炫一些,窗口动画由WMS的动画子系统来负责,动画子系统的管理者为WindowAnimator。

  1. 输入系统的中转站

通过对窗口的触摸从而产生触摸事件,InputManagerService(IMS)会对触摸事件进行处理,它会寻找一个最合适的窗口来处理触摸反馈信息,WMS是窗口的管理者,它作为输入系统的中转站再合适不过了。

  1. Surface管理

窗口并不具备绘制的功能,因此每个窗口都需要有一块Surface来供自己绘制,为每个窗口分配Surface是由WMS来完成的。

WMS的重要成员

  • mPolicy: WindowManagerPolicy

mPolicy是WindowManagerPolicy(WMP)类型的变量。WindowManagerPolicy是窗口管理策略的接口类,用来定义一个窗口策略所要遵循的通用规范,并提供了WindowManager所有的特定的UI行为。它的具体实现类为PhoneWindowManager,这个实现类在WMS创建时被创建。WMP允许定制窗口层级和特殊窗口类型以及关键的调度和布局。

  • mSessions: ArraySet

mSessions是ArraySet类型的变量,元素类型为Session,它主要用于进程间通信,其他的应用程序进程想要和WMS进程进行通信就需要经过Session,并且每个应用程序进程都会对应一个Session,WMS保存这些Session用来记录所有向WMS提出窗口管理服务的客户端。

  • mWindowMap: HashMap

mWindowMap是HashMap类型的变量,用来保存WMS中各种窗口的集合。key值的类型为IBinder,value值的类型为WindowState。WindowState用于保存窗口的信息,在WMS中它用来描述一个窗口。

  • mResizingWindows: ArrayList

mResizingWindows是ArrayList类型的变量,元素类型为WindowState。mResizingWindows是用来存储正在调整大小的窗口的列表。与mResizingWindows类型的还有mForceRemoves、mDestroySurface等,其中mForceRemoves是在内存耗尽时设置的,里面存有需要强制删除的窗口,mDestroySurface里面存有需要被销毁的Surface。

  • mAnimator: WindowAnimator

mAnimator是WindowAnimator类型的变量,用于管理窗口的动画以及特效动画。

  • mH: H

mH是H类型的变量,系统的Handler类,用于将任务加入到主线程的消息队列中,这样代码逻辑就会在主线程中执行。

  • mInputManager: InputManagerService

mInputManager是InputManagerService类型的变量,输入系统的管理者。InputManagerService(IMS)会对触摸事件进行处理,它会寻找一个最合适的窗口来处理触摸反馈信息,WMS是窗口的管理者,因此WMS作为输入系统的中转站是再合适不过了。


WMS及其成员
https://citrus-maxima.github.io/2024/03/10/WMS及其成员/
作者
柚子树
发布于
2024年3月10日
许可协议