View绘制系列(2)-View生命周期

View生命周期

View简介之后,我们已经清楚的认识到View的基本概念:

  • View是屏幕上的一块用于绘制和用户交互的矩形区域

  • View是一个类,该类对象在View树创建或者我们使用Java new关键词调用构造函数时创建

了解C++的小伙伴们肯定都听过构造函数和析构函数这两个名词,通过构造函数我们可以生成一个类对象,通过析构函数我们可以完成一个对象的销毁,那么对于同样面对对象的Java而言,其是否有相似的机制?当然有,在Java中,我们通过构造函数进行对象创建,而对象的销毁由Java GC(全称Garbage Collection,意为垃圾回收)机制自动执行。

View作为一个对象,当然也有其生命周期,结合View的函数,我们可以绘制出下图:

View绘制系列(2)-View生命周期

上图中函数说明如下表:

函数名称 函数说明 备注
Constructor View类的构造函数,在该构造函数中进行View对象的初始化,读取attr属性 attr属性指Android:layout_width,android:layout_height诸如此类在xml文件中声明的View属性值
onAttachedToWindow() 当该View对象被添加到一个Window窗体内的时候会调用该函数 WindowViewActivity之间关系参见面试之Window&Activity&View
measure View内部的保留函数,不建议重写,结合父控件在宽高上的约束信息,确认View的大小, 该函数内部会调用onMeasure(int widthMeasureSpec, int heightMeasureSpec)函数
onMeasure(int widthMeasureSpec, int heightMeasureSpec) 测量View及其内容以用于确定测量后的宽度和高度。 measure函数调用,应该被View子类重写,以提供准确有效的测量方式
layout View内部的保留函数,不建议重写,进行View及其子View的布局,分配View及其子View的大小及位置 该函数内部会调用onLayout(boolean changed, int left, int top, int right, int bottom)方法。
onLayout(boolean changed, int left, int top, int right, int bottom) View的子View指定大小和位置时调用 layout函数调用,应该被View子类重写,在该方法中调用各个子Viewlayout方法
draw(Canvas canvas) View保留方法,不建议重写。将View的内容渲染到画布上 此时View必须已完成完成的layout布局过程,当实现View子类时,我们可以通过重写onDraw(Canvas canvas)方法来替代该方法,如果实在需要重写,记得首先调用super.draw(canvas).
onDraw(Canvas canvas) 在该方法中进行自定义绘制,绘制当前需要展示的内容 draw函数调用,建议在View子类中重写该方法,在该方法中进行自定义绘制
dispatchDraw(Canvas canvas) View绘制完成后,View 的子View绘制完成前,系统会调用该方法 draw函数调用,View子类中可通过重写该方法,在自身绘制完成后,子View绘制完成前获取画布,进行某些特殊情形的绘制
invalidate() UI线程内View的刷新方法 View可见状态下,该方法会导致View调用onDraw(Canvas canvas)方法进行重绘.注意在子线程进行View刷新时,我们可以调用postInvalidate()来实现。
requestLayout() View的某些变化使得layout布局及measure过程数据无效时,需要调用该方法 该方法会导致View树重新进行layoutmeasure流程,如果View树正在布局中,我们不应调用该方法,可以等待当前布局结束或者绘制当前帧完成发生下一次绘制时调用。我们可以通过isInLayout()来判断View树是否正在布局中。

从上图中,我们可以看出,对View对象而言,当其完成绘制流程后,自身对用户变为可用状态,此时可以响应用户交互,并根据用户交互进行UI刷新,其中invalidaterequestLayout用于线程内部UI刷新,postInvalidate用于子线程UI刷新。

结合表中描述,对上图进行归类划分我们可以得到新的View生命周期图:

View绘制系列(2)-View生命周期

END!


往期推荐

View绘制系列(1)-View简介

OpenCV SDK下载及Android Java环境搭建

原文始发于微信公众号(小海编码日记):View绘制系列(2)-View生命周期

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/67974.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!