一、概述
surface:画布
WMS:添加Window的过程主要是添加surface,管理所有的surface布局,以及Z轴的顺序问题。
SurfaceFinger:将Surface按次序混合并显示到物理屏幕上。
二、wms的整体概述
-
WMS继承于
IWindowManager.Stub, 作为Binder服务端; -
WMS的成员变量mSessions保存着所有的Session对象,Session继承于
IWindowSession.Stub, 作为Binder服务端; -
成员变量mPolicy: 实例对象为PhoneWindowManager,用于实现各种窗口相关的策略;
-
成员变量mChoreographer: 用于控制窗口动画,屏幕旋转等操作;
-
成员变量mDisplayContents: 记录一组DisplayContent对象,这个跟多屏输出相关;
-
成员变量mTokenMap: 保存所有的WindowToken对象; 以IBinder为key,可以是IAppWindowToken或者其他Binder的Bp端;
另一端情况:ActivityRecord.Token extends IApplicationToken.Stub -
成员变量mWindowMap: 保存所有的WindowState对象;以IBinder为key, 是IWindow的Bp端;
另一端情况: ViewRootImpl.W extends IWindow.Stub -
一般地,每一个窗口都对应一个WindowState对象, 该对象的成员变量mClient用于跟应用端交互,成员变量mToken用于跟AMS交互.
三、WMS启动过程
整个启动过程涉及3个线程: system_server主线程, “android.display”, “android.ui”, 整个过程是采用阻塞方式(利用Handler.runWithScissors)执行的. 其中WindowManagerService.mH的Looper运行在 “android.display”进程,也就意味着WMS.H.handleMessage()在该线程执行。 流程如下: