在自定义view中打log,view的显示共有三种,visible、invisible和gone,分别看一下log:

gone

onVisibilityChanged
construct 2 parameters
onFinishInflate
onVisibilityChanged
onVisibilityChanged
onRtlPropertiesChanged
onRtlPropertiesChanged
onAttachedToWindow
onWindowVisibilityChanged
onWindowFocusChanged

invisible

onVisibilityChanged
construct 2 parameters .
onFinishInflate
onVisibilityChanged
onVisibilityChanged
onRtlPropertiesChanged
onRtlPropertiesChanged
onAttachedToWindow
onWindowVisibilityChanged
onMeasure , width : 1080 ; height: 1557
onMeasure , width : 144 ; height: 1500
onSizeChanged
onLayout --> l: 0 ; r : 144 ; t: 57 ; b: 201 : changed :true
onMeasure , width : 1080 ; height: 1557
onMeasure , width : 144 ; height: 1500
onLayout --> l: 0 ; r : 144 ; t: 57 ; b: 201 : changed :false
onWindowFocusChanged

visible

construct 2 parameters .
onFinishInflate
onVisibilityChanged
onVisibilityChanged
onRtlPropertiesChanged
onRtlPropertiesChanged
onAttachedToWindow
onWindowVisibilityChanged
onMeasure , width : 1080 ; height: 1557
onMeasure , width : 144 ; height: 1500
onSizeChanged
onLayout --> l: 0 ; r : 144 ; t: 57 ; b: 201 : changed :true
onMeasure , width : 1080 ; height: 1557
onMeasure , width : 144 ; height: 1500
onLayout --> l: 0 ; r : 144 ; t: 57 ; b: 201 : changed :false
onDraw
onWindowFocusChanged

1、从中看到view默认为可见的,不是默认值时先调用 onVisibilityChanged ,但是此时该view的任何位置信息都不知道。

2、可见性改变后才是调用带有两个参数的构造函数

3、从xml 文件中 inflate 完成

4、将view 加到 window 中(View 是gone 的,那么View创建生命周期也就结束)

5、测量view的长宽(onMeasure)

6、定位View在父View中的位置(onLayout)--->(View 是invisible ,View 创建生命周期结束)

7、onDraw(只有可见的View 才在window 中绘制)

setContentView(new View(this))

construct 1 parameter
onVisibilityChanged
onVisibilityChanged
onRtlPropertiesChanged
onRtlPropertiesChanged
onAttachedToWindow
onWindowVisibilityChanged
onMeasure , width : 1080 ; height: 1557
onSizeChanged
onLayout --> l: 0 ; r : 1080 ; t: 0 ; b: 1557 : changed :true
onMeasure , width : 1080 ; height: 1557
onLayout --> l: 0 ; r : 1080 ; t: 0 ; b: 1557 : changed :false
onDraw
onWindowFocusChanged

默认情况下view的长和宽默认和父view的长和宽一致。

销毁

onWindowFocusChanged
onWindowVisibilityChanged
onDetachedFromWindow

总结

View 的关键生命周期为

构造View --> onFinishInflate --> onAttachedToWindow --> onMeasure --> onSizeChanged --> onLayout --> onDraw --> onDetackedFromWindow

我是天王盖地虎的分割线

Android -- View流程的更多相关文章

  1. Android View的绘制机制流程深入详解(四)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第四篇主要介绍Android自定义View及ViewGroup的实现方法和流程. 主要介绍了自绘控件.自定义组合控件.自定义继承控件 ...

  2. Android View的绘制机制流程深入详解(三)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第三篇主要介绍并分析视图状态以及重绘流程,首先剖析了 视图的几种状态,然后在深入分析视图的重绘机制流程. 真题园网:http://w ...

  3. Android View的绘制机制流程深入详解(二)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第二篇主要介绍并分析Android视图的绘制的原理和流程.主要从 onMeasure().onLayout()和onDraw()这三 ...

  4. Android View的绘制机制流程深入详解(一)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第一篇主要介绍并分析LayoutInflater的原理, 从而理解setContentView的加载原理.对于LayoutInfla ...

  5. android View层的绘制流程

    还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原理,记不记得 ...

  6. Android View体系(八)从源代码解析View的layout和draw流程

    相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...

  7. Android View 绘制刷新流程分析

    Android中对View的更新有很多种方式,使用时要区分不同的应用场合.1.不使用多线程和双缓冲      这种情况最简单,一般只是希望在View发生改变时对UI进行重绘.你只需显式地调用View对 ...

  8. Android View 绘制流程(Draw) 完全解析

    前言 前几篇文章,笔者分别讲述了DecorView,measure,layout流程等,接下来将详细分析三大工作流程的最后一个流程——绘制流程.测量流程决定了View的大小,布局流程决定了View的位 ...

  9. Android View 布局流程(Layout)完全解析

    前言 上一篇文章,笔者详细讲述了View三大工作流程的第一个,Measure流程,如果对测量流程还不熟悉的读者可以参考一下上一篇文章.测量流程主要是对View树进行测量,获取每一个View的测量宽高, ...

随机推荐

  1. ios数据保存

  2. Spring_Spring@Transactional

    Spring事务的传播行为 在service类前加上@Transactional,声明这个service所有方法需要事务管理.每一个业务方法开始时都会打开一个事务. Spring默认情况下会对运行期例 ...

  3. ftp通用类2

    using System; using System.Net; using System.IO; using System.Text; using System.Net.Sockets; /// &l ...

  4. web压力测试工具(小而精)

    实际的测试过程中,我们一般都是采用A.B两台机器,一台跑Web服务,另外一台跑ab测试.也有的情况是单机对单机可能测不出结果,那就要采用很多台机器同是跑AB去请求一台机器进行测试,根据多台机器反馈的结 ...

  5. HappyJTAG2 - JTAG AND SPI AVR8 interface EMBEDDED JTAG ! EMBEDDED SPI !

    New version released ! V2.45 (Check version list for details) This construction is based on HappyJTA ...

  6. TVB三个台

    翡翠台http://token.tvb.com/stream/live/hls/mobilehd_jade.smil 高清翡翠,http://token.tvb.com/stream/live/hls ...

  7. Revit Family API 添加参数与尺寸标注

    使用FamilyManager其他的与普通添加参数与标注没区别. [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Man ...

  8. 在 DELPHI 中 procedure 型变量与 method 型变量的区别

    Procedure型变量: 在DELPHI中,函数.过程的地址可以赋给一个特殊类型的变量,变量可用如下方式声明: var p : procedure(num:integer); //过程 或: var ...

  9. Why I Left the .NET Framework

    The .NET Framework was good. Really good. Until it wasn't. Why did I leave .NET? In short, it constr ...

  10. WebStorm中使用ES6的几种方式

    本篇总结几种在WebStorm下使用ES6的方式. 首先要选择Javascript的版本.依次点击"File","Settings","Languag ...