Android GUI系统-View框架(一)
View框架
相关元素的关系:
1)View和ViewRoot,ViewRoot可以理解为View树的管理者,是ViewRootImpl类型的对象,Activity和ViewRoot是一对一的关系,他有一个成员变量mView,是View树的根,也就是xml布局的顶层元素,ViewRoot的核心任务是跟WMS通信。
2)Activity和Window,Activity有一个成员变量mWindow就是Window类型的对象,Window基类,手机系统中默认是指phoneWindow,这个phoneWindow对象是什么时候生成的?在启动Activity的过程中,最后一步会调用performLaunchActivity,在这个函数里通过activity.attach的调用生成了mWindow= new PhoneWindow(this, window)。
3)Window和WindowManagerImpl,Window是面向Activity的,是UI界面的外框,框里面的具体内容由Window的具体类(如phoneWindow)规划。
Window需要跟WMS通信,一个应用程序里面可能有多个Window,这些window需要统一的管理,所以有了WindowManager,也就是Window的成员变量mWindowManager,WindowManager是一个接口,具体的实现类是WindowManagerImpl,WindowManagerImpl可以认为是整个应用程序中所有窗口的管理者。
4)ViewRoot和WindowManagerImpl,WindowManagerImpl中有一个成员变量mGlobal,是WindowManagerGlobal类型的变量,它通过三个列表mViews、mRoots、mParams来管理View树的根节点,ViewRoot及Window属性。
5)ViewRoot和WindowManagerService,ViewRoot中有一个mWindowSession成员变量,是用于跟WMS通信的,因为它是匿名的Binderserver,所以要通过WMS的接口openSession获得,同时ViewRoot利用mWindowSession的addToDisplay提供一个IWindow类型的Binder对象给WMS,让WMS可以通过这个Binder对象跟ViewRoot通信。
6)
跟窗口相关的两个概念,phoneWindow继承自Window类,是应用进程端对窗口的描述,表达了对窗口的一种约束;WMS中的window是一个抽象的概念,用WindowState来描述其状态,WindowState可以认为是WMS中对窗口的描述。
借用一张网上的图: