在自定义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. 开源的服务发现项目Zookeeper,Doozer,Etcd - 木精灵的技术博客 - CSDN博客

    开源的服务发现项目Zookeeper,Doozer,Etcd - 木精灵的技术博客 - CSDN博客   http://blog.csdn.net/shlazww/article/details/38 ...

  2. HDU 4813 Hard Code(水题,2013年长春现场赛A题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4813 签到题. 把一个字符串按照格式输出就可以了,很水 #include <stdio.h> ...

  3. HDU 4731 Minimum palindrome (2013成都网络赛,找规律构造)

    Minimum palindrome Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. BootstrapClassloader ExtClassloader AppClassloader

    http://www.importnew.com/26269.html   import java.net.URL; class test9 { public static void main(Str ...

  5. 浅谈BFC和IFC

    先说说FC,FC的含义就是Fomatting Context.它是CSS2.1规范中的一个概念. 它是页面中的一块渲染区域.而且有一套渲染规则,它决定了其子元素将怎样定位.以及和其它元素的关系和相互作 ...

  6. java容器类---概述

    1.容器类关系图 虚线框表示接口. 实线框表示实体类. 粗线框表示最经常使用的实体类. 点线的箭头表示实现了这个接口. 实线箭头表示类能够制造箭头所指的那个类的对象. Java集合工具包位于Java. ...

  7. Revit API选择三维视图上一点

    start [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)] public class cmdPickP ...

  8. sql语句中having的作用是?

    HAVING对由sum或其它集合函数运算结果的输出进行限制.比如,我们可能只希望看到Store_Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使用HAVING从句. ...

  9. cocos2d-x 清空缓存

    如场景切换  在内存吃紧的情况下 我们可以选择 先清理一下缓存 // 清空缓存 CCDirector::sharedDirector()->purgeCachedData();

  10. WordPress主题开发:实现分页功能

    注意的是这个受后台这里的文章篇数设置所影响~ 一.使用内置方法 (WordPress 4.1以前无效) the_posts_pagination 输出分页式导航,用法: <?php the_po ...