WMS 概述 -- "窗口管理员"
- 1、WMS 职责
- 2、涉及元素
- 3、WMS、AMS与Activity间的关系
1、WMS 职责
WMS职责 | 理解 |
---|---|
窗口管理 | WMS 是窗口的管理者,它负责窗口的启动、添加和删除,另外窗口的大小和层级也是由WMS 进行管理的。窗口管理的核心成员有 DisplayContent 、WindowToken 和WindowState 。 |
窗口动画 | 窗口间进行切换时,使用窗口动画可以显得更炫一些,窗口动画由 WMS 的动画子系统来负责,动画子系统的管理者为 WindowAnimator 。 |
输入系统的中转站 | 通过对窗口的触摸从而产生触摸事件,InputManagerService(IMS) 会对触摸事件进行处理,它会寻找一个最合适的窗口来处理触摸反馈信息,WMS 是窗口的管理者,因此,WMS“理所应当”的成为了输入系统的中转站。 |
Surface 管理 | 窗口并不具备有绘制的功能,因此每个窗口都需要有一块 Surface 来供自己绘制。为每个窗口分配 Surface 是由 WMS 来完成的。 |
2、涉及元素
1.WindowManagerService(WMS)
- 由SystemServer启动
- 直到系统关机时才退出
- 发生异常时必须能自动重启
2.SurfaceFlinger
3.有图形显示需求的程序
- Application Window
- System Window
- Sub Window
- …
4.InputManagerService(IMS)
5.ActivityManagerService(AMS)
6.Binder通信
3、WMS、AMS与Activity间的关系
- IPC通信
Activity运行在应用程序进程中,而AMS和WMS运行在系统相关进程中,它们之间需要Binder跨进程通信。
WMS与AMS实际上时驻留在同一个进程中的,所以理论上是可以进程函数调用的。
2.关联元素
一个新Activity启动,首先在AMS中注册,AMS生成一个ActivityRecord记录;另外WMS中以WindowState保存一个“窗口信息”,使用AppWindowToken来对应一个ActivityRecord。