美文网首页
View体系1:几个概念

View体系1:几个概念

作者: 81bad73e9053 | 来源:发表于2016-12-05 21:11 被阅读23次

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<View> mViews = new ArrayList<View>();
    private final ArrayList<ViewRootImpl> mRoots = new ArrayList<ViewRootImpl>();
    private final ArrayList<WindowManager.LayoutParams> mParams =
            new ArrayList<WindowManager.LayoutParams>();

5.ViewRoot和WindowManagerService

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

private static IWindowSession sWindowSession;

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

Paste_Image.png

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

相关文章

网友评论

      本文标题:View体系1:几个概念

      本文链接:https://www.haomeiwen.com/subject/kedlmttx.html