应用程序中的View框架

综述

每个Application都有一个ActivityThread主线程以及mActivies全局变量,后者记录了运行在应用程序中的所有Activity对象,一个Activity对应唯一的Window以及ViewRootImpl,WindowManagerGlobal作为全局管理者,其内部的mRoots和mViews记录了个Activity的ViewRootImpl和View树的顶层元素,ViewRootImpl的另一个重要角色就是负责与WMS进行通信,从ViewRootImpl到WMS间的通信利用的是IWindowSession,而反方向则是由IWindow来完成的。

详解

Activity是负者显示UI的,但是他不能直接的管理View和ViewRoot(相当于View树的管理者,他有一个mView的成员变量,指向View树的根),而是通过他的一个成员变量

private Window mWind

但是一个应用程序不可能只有一个activity,这样的话Window就需要统一的管理这个类就是WindowMananger(该类是个接口,真正的实现类是WindowManagerImpl),在WindowManagerImpl又通过WindowManagerGlobal来管理view。

vate final WindowManagerGlobal mGlobal = WindowManagerGlobal.getInstance();

知道了View是在哪里管理的了,那么和WindowManagerService通信是通过ViewRootImpl内部的一个全局变量来与WMS通信:

static IWindowSession sWindowSession;

而ViewRoot也会通过IWindowSession.add()方法提供一个IWindow对象-从而让Wms也可以通过这个binder对象来与ViewRoot进行双向通信。

你可能感兴趣的:(android,view)