View体系1:几个概念

1.View和ViewRoot

ViewRoot并不是View树的一部分,ViewRoot和View没有血缘关系,既不是子类也不是父类,ViewRoot是View树的管理者,ViewRoot有一个mView成员变量,该变量指向View树的根节点。

ViewRoot的核心任务是与WindowManagerService通信

2.Activity和Window的关系

Activity支持UI显示,但Activity并没有直接管理View树或者通过ViewRoot来管理View树,Activity并没有和这两者有直接的联系,而是通过中间的Window对象来建立联系

private Window mWindow;

3.Window和WindowManagerImpl

Window是面向Activity的,表示UI界面的外框,框里面的东西包括布局和内容等,是由Window的子类来规划的。Window的另一层含义是与WindowManagerService进行通信,但它并没有自己直接实现这一功能,原因是:一个应用程序中可能存在多个Window,如果它们都单独和WMS通信的话,既浪费资源,又会造成管理混乱,换句话说它需要统一的管理,于是就有了WindowManager,它作为Window的成员变量mWindowManager存在。

4.ViewRoot和WindowManagerImpl

WindowManagerImpl将工作交由WindowManagerGlobal进行处理在WindowManagerGlobal当中


    private final ArrayList mViews = new ArrayList();
    private final ArrayList mRoots = new ArrayList();
    private final ArrayList mParams =
            new ArrayList();

5.ViewRoot和WindowManagerService

ViewRoot的实现类ViewRootImpl中有一个ViewRootGlobal其中有一个变量

private static IWindowSession sWindowSession;

该变量用于ViewRootGlobal到WMS的连接,该变量通过WMS的openSession方法获取,在此基础上,IwindowSession的add方法会提供一个IWindow对象,从而让WMS也通过BInder对象来与ViewRoot进行双向通信。

View体系1:几个概念_第1张图片
Paste_Image.png

从ViewRootImpl到WMS的通信利用的是IWindowSession,从WMS到ViewRootImpl用的是IWindow

你可能感兴趣的:(View体系1:几个概念)