Android里应用程序,应用程序窗口和视图对象之间的关系

栏目: Android · 发布时间: 5年前

内容简介:很久没更新博客了,在新博客里打算对android的view的绘制机制进行全方位分析,由于涉及到的范围相当之广(比消息机制里涉及到的还多,简直可怕),因此打算先来个总序来说清楚应用程序(activity),应用程序窗口(window)和视图对象(view)之间的关系,方便读者对接下来的博客(view的绘制)能更好地理解,这就是这篇博客的目的。在Android里, 每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口。每一个应用程序窗口内部又包含有一个View对象,用来描述应用程

很久没更新博客了,在新博客里打算对android的view的绘制机制进行全方位分析,由于涉及到的范围相当之广(比消息机制里涉及到的还多,简直可怕),因此打算先来个总序来说清楚应用程序(activity),应用程序窗口(window)和视图对象(view)之间的关系,方便读者对接下来的博客(view的绘制)能更好地理解,这就是这篇博客的目的。

在Android里, 每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口。每一个应用程序窗口内部又包含有一个View对象,用来描述应用程序窗口的视图。应用程序窗口视图是真正用来实现UI内容和布局的,也就是说,每一个Activity组件的UI内容和布局都是通过与其所关联的一个Window对象的内部的一个View对象来实现的。

先来张图理一下(从其他博客里盗用的图):

Android里应用程序,应用程序窗口和视图对象之间的关系

对于window,DecorView,view,viewGroup,windowMnager和viewRoot的关系如下:

1.每个主窗口中都有一个view,称之为decorview,是主窗口中的顶级view,实际上是viewGroup,viewGroup又是对一组view的管理,因此在viewGroup中建立了所有view的关系网,那么是如何实现的呢?是因为在view中有两个成员变量叫做mParent,mChildren,它们就是用来管理view的上下级关系的。而最终viewGroup附属在主窗口上,这样就很容易实现在窗口中通过findViewById找到具体的view了。当然,view的事件处理也是根据这个路径来处理的。

2.windowManager主要是用来管理窗口的一些状态,属性,view增加,删除,更新,窗口顺序,消息收集和处理等等。windowManager继承自ViewManager.里面涉及到窗口管理的三个重要的方法,分别是:addView(),updateViewLayout(),removeView(),在windowManager中还有一个静态类layoutParams,通过它可以设置和获得当前窗口的一些属性。首先来看看addView()方法,在该方法中,会利用layoutParams来获得window中的view的一些属性,并为每个window创建viewRoot,viewRoot是view和windowManager之间的桥梁,真正把view传递给windowManager的是通过viewRoot来实现的(setView()方法)

3.ViewRoot相当于是MVC模型中的Controller.实际上,ViewRoot继承自handler,因此也实现了view和windowManager之间的消息传递,窗口中的view的事件处理,消息发送,回调事件等都将通过ViewRoot来处理。

4.当activity对象被创建完毕之后,会在PhoneWindow中生成一个DecorView,DecorView是一个窗口的顶级容器,其本质是一个FrameLayout,同时会创建ViewRootImpl(ViewRoot的实现类)对象,并将ViewRootImpl与DecorView建立关联:

 public void reportActivityRelaunched() {
        if (mDecor != null && mDecor.getViewRootImpl() != null) {
            mDecor.getViewRootImpl().reportActivityRelaunched();
        }
    }

View的绘制流程从ViewRoot的performTraversals方法开始,经过measure、layout、draw三大过程完成对一个View的绘制工作。peformTraversal方法内部会调用peformMeasure、peformLayout、peformDraw这三个方法,这三个方法内部又分别调用view的Measure、Layout、Draw方法。

---------------------

作者:_花开满楼

来源:CSDN

原文:https://blog.csdn.net/qq_28269905/article/details/70895269

版权声明:本文为博主原创文章,转载请附上博文链接!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

互联网爆破术:快速掌握互联网运营全链条实战技巧

互联网爆破术:快速掌握互联网运营全链条实战技巧

茶文 / 电子工业出版社 / 2018-7 / 49.00元

《互联网爆破术:快速掌握互联网运营全链条实战技巧》是一本实用的互联网运营书籍,可以让读者快速掌握运营全链条的干货技巧和相关模型,涵盖如何有效寻找市场的需求爆破点,通过测试一步步放大并引爆,直至赢利。《互联网爆破术:快速掌握互联网运营全链条实战技巧》非常适合互联网运营人员及互联网创业者阅读,它可以帮读者快速了解互联网运营的核心技巧,并用最低的成本取得成功。本书5大特色:快速入门、实战干货、低成本、系......一起来看看 《互联网爆破术:快速掌握互联网运营全链条实战技巧》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具