
image.png
Android之WindowManagerService介绍](https://cloud.tencent.com/developer/article/1816992)
WMS是系统服务,主要负责窗口的一下管理,主要包括如下:
”可以毫不夸张的说,Android的framework层主要是由WMS、AMS还有View所构成,这三个模块穿插交互在整个framework中,掌握了它们之间的关系和每一个逻辑步骤,你对framework的了解至少有百分之五十”。这是《Android源码与设计模式》作者的原话。

image.png
一个App从启动到主窗口显示出来,需要App,ActivityManagerService(AMS),WindowManagerService(WMS),SurfaceFlinger(SF)等几个模块相互合作。App负责业务逻辑,绘制自己的视图;AMS管理组件、进程信息和Activity的堆栈及状态等等;WMS管理Activity对应的窗口及子窗口,还有系统窗口等;SF用于管理图形缓冲区,将App绘制的东西合成渲染在屏幕上。

image.png
在android的应用框架中,窗口主要分为两种:
名字 | 含义 |
|---|---|
mPolicy:WindowManagerPolicy | 是窗口管理策略的接口类,用来定义一个窗口策略所要遵循的通用规范,并提供了WindowManager所有的特定的UI行为 |
mSessions:ArraySet | 主要用于进程间通信,其他的应用程序进程想要和WMS进程进行通信就需要经过Session,并且每个应用程序进程都会对应一个Session |
mWindowMap:WindowHashMap | 用来保存WMS中各种窗口的集合 |
mFinishedStarting:ArrayList | 用于存储已经完成启动的应用程序窗口(比如Activity)的AppWindowToken的列表 |
mResizingWindows:ArrayList | 用来存储正在调整大小的窗口的列表 |
mAnimator:WindowAnimator | 用于管理窗口的动画以及特效动画 |
mH:H | 用来将任务加入到主线程的消息队列中 |
mInputManager:InputManagerService | 输入系统的管理者 |
WindowToken可以理解为窗口令牌,且会将一个组件(比如同一个Activity)的窗口(WindowState)集合在一起,方便管理
主要是以下4件事
要删除Window需要先调用WindowManagerImpl的removeView方法,在removeView方法中又会调用WindowManagerGlobal的removeView方法
主要是以下4件事

image.png