Android GUI系统-View框架(一)

View框架

相关元素的关系:

1ViewViewRootViewRoot可以理解为View树的管理者,是ViewRootImpl类型的对象,ActivityViewRoot是一对一的关系,他有一个成员变量mView,是View树的根,也就是xml布局的顶层元素,ViewRoot的核心任务是跟WMS通信。


2ActivityWindowActivity有一个成员变量mWindow就是Window类型的对象,Window基类,手机系统中默认是指phoneWindow,这个phoneWindow对象是什么时候生成的?在启动Activity的过程中,最后一步会调用performLaunchActivity,在这个函数里通过activity.attach的调用生成了mWindow= new PhoneWindow(this, window)


3WindowWindowManagerImplWindow是面向Activity的,是UI界面的外框,框里面的具体内容由Window的具体类(如phoneWindow)规划。

Window需要跟WMS通信,一个应用程序里面可能有多个Window,这些window需要统一的管理,所以有了WindowManager,也就是Window的成员变量mWindowManagerWindowManager是一个接口,具体的实现类是WindowManagerImplWindowManagerImpl可以认为是整个应用程序中所有窗口的管理者。


4ViewRootWindowManagerImplWindowManagerImpl中有一个成员变量mGlobal,是WindowManagerGlobal类型的变量,它通过三个列表mViewsmRootsmParams来管理View树的根节点,ViewRootWindow属性。


5ViewRootWindowManagerServiceViewRoot中有一个mWindowSession成员变量,是用于跟WMS通信的,因为它是匿名的Binderserver,所以要通过WMS的接口openSession获得,同时ViewRoot利用mWindowSessionaddToDisplay提供一个IWindow类型的Binder对象给WMS,让WMS可以通过这个Binder对象跟ViewRoot通信。


6)

跟窗口相关的两个概念,phoneWindow继承自Window类,是应用进程端对窗口的描述,表达了对窗口的一种约束;WMS中的window是一个抽象的概念,用WindowState来描述其状态,WindowState可以认为是WMS中对窗口的描述。


借用一张网上的图:

Android GUI系统-View框架(一)