WindowManagerService探索——WMS介绍

前言

前面几节,我们介绍了窗口的管理者——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启动过程中创建的几个较为重要的成员变量,以便后面详细介绍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 {
}

可以看到,WindowHashMap将HashMap的key值限制为类型是IBinder,value值类型是WindowState。WindowState用于保存Window的属性,所以mWindowMap是用来保存各种窗口的集合。
4.mAnimator: WindowAnimator
mAnimator是WindowAnimator类型的变量,用于管理窗口的动画以及特效动画。

到这里,本章介绍了WMS的整体架构以及重要的成员变量,接下来系列文章将会深入架构的四个模块进行学习分析。

本文已独家授权公众号ApeClub使用,更多好文请关注ApeClub。

你可能感兴趣的:(WindowManagerService探索——WMS介绍)