相关概念
Window
是一个抽象类,唯一的实现类是 PhoneWindow
分类:
-
父 Window
-
子 Window,不能单独存在,需要依附在父 window 上,例如 dialog
-
系统 Window,例如 toast
PhoneWindow
在 Activity attach 时构造了 PhoneWindow 的实例对象。
WindowManager
是一个接口,用于操作 Window,继承了 ViewManager。实现类是 WindowManagerImpl
ViewManager 的方法:
1 |
public void addView(View view, ViewGroup.LayoutParams params); |
可以看到三个操作方法都是针对 View 的,View 是 Window 的实体类
WindowManagerImpl
没有直接操作 View,而是交个了 mGlobal(WindowManagerGlobal)
1 |
@Override |
WindowManagerGlobal
保存了所有的 ViewRootImpl,在 addView 时会创建 ViewRootImpl 实例,并将要 add 的 View 设置给 ViewRootImpl(见源码 1.1)
View 的绘制过程是由 ViewRootImpl 来完成的。在新建一个 Activity 时,这个要 add 的 View 就是 DecorView。
IWindowSession
(AIDL)窗口令牌,描述了一个显示行为,并且WMS要求每一个窗口必须隶属于某一个显示令牌。
WindowState
当向WMS添加一个窗口时,WMS会为其创建一个WindowState。
WindowManagerService(WMS)
WMS为所有窗口分配Surface,掌管Surface的显示顺序(Z-order)以及位置尺寸,控制窗口动画,并且还是输入系统的一重要的中转站。
源码
1.1
1 |
//WindowManagerGlobal |
近期评论