前言
前面几节,我们介绍了窗口的管理者——WindowManager,如果说WindowManger是管理每个Window的工头的话,那么WindowManagerService(下面简称WMS)就是WindowManager的老板。本文将介绍WMS的整体架构以及其重要成员变量对应的作用。
WMS架构
WMS是Android系统中的重要服务之一,无论是应用开发还是系统开发都是应该必备的知识之一,那么WMS具体有什么功能呢,接下来就简单总结一下:
Window管理
WMS是Window的真正管理者,它负责了Window的add、remove以及update,并且window的大小和z序(Window的层级)也是有WMS实现的。
WindowAnimation
WMS中的子系统WindowAnimator就是负责窗口间进行切换动画。
输入系统的中转站
通过对窗口的触摸产生的触摸事件,这些触摸事件需要找到对应的window来响应,WMS作为窗口的管理者,它可以作为窗口和InputManagerService(IMS)的中转站。
Surface管理
窗口并不具备绘制的功能,所以每个窗口都需要一块Surface来供自己绘制,而每个窗口对应的Surface是由WMS分配的。
这里总结了一张关于WMS架构的关系图,后面文章将根据此关系图依次介绍WMS。

WMS重要成员介绍
接下来介绍一下WMS启动过程中创建的几个较为重要的成员变量,以便后面详细介绍WMS时,大家可能不知道某些变量是用来做什么的。

1.mPolicy: WindowManagerPolicy
mPolicy是WindowManagerPolicy(WMP)类型的变量。WindowManagerPolicy是窗口管理协议的接口类,用做定义一个窗口需要遵循的协议。它的具体实现类为PhoneWindowManager,该实现类在WMS创建时被创建。
2.mSessions:ArraySet
mSessions用于存储每个进程对应的Session,用于进程间通讯。
3.mWindowMap:WindowHashMap
mWindowMap是WindowHashMap类型的变量,WindowHashMap,从名称来看就是继承了HashMap,它是这么定义的:
class WindowHashMap extends HashMap<IBinder, WindowState> {
}
可以看到,WindowHashMap将HashMap的key值限制为类型是IBinder,value值类型是WindowState。WindowState用于保存Window的属性,所以mWindowMap是用来保存各种窗口的集合。
4.mAnimator: WindowAnimator
mAnimator是WindowAnimator类型的变量,用于管理窗口的动画以及特效动画。
到这里,本章介绍了WMS的整体架构以及重要的成员变量,接下来系列文章将会深入架构的四个模块进行学习分析。
本文已独家授权公众号ApeClub使用,更多好文请关注ApeClub。
网友评论