在自定义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. Node.js开源应用OSN发布初始V1.0版本-见面版本

    Nodejs开源应用OSN初始版本V1.0发布,请参考本操作说明文档,有任何问题请留言 Nodejs开源应用OSN发布V1.0版本: OSChina收录地址: OSC收录地址:http://www.o ...

  2. KVM磁盘镜像qcow2、raw、vmdk等格式区别(转)

    raw(default) the raw format is a plain binary image of the disc image, and is very portable. On file ...

  3. WPF中的3D变换PlaneProjection

    在UWP中有一个比较好用的伪3D变换PlaneProjection,可以以一种轻量级和非常简单的方式实现3D的效果.这种效果在Silverlight中也有这种变换,但在WPF中确一直没有提供. 虽然W ...

  4. 视频监控系统:C/S &amp; B/S

    近期一直和视频监控打交道.也做了大量的工作.当中包括了监控系统的两种模式实现: 1.C/S架构 C/S架构,主要是Android系统下监控client设计,基于VLC实现,可直接观看IP摄像机RTSP ...

  5. WinForm多线程实现HTTP网络检测工具

    一.背景描述与课程介绍 明人不说暗话,跟着阿笨一起玩WinForm.本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高 ...

  6. 浅析CentOS和RedHat Linux的区别

    CentOS的简介 CentOS是Community ENTerprise Operating System的简称,我们有很多人叫它社区企业操作系统,不管你怎么叫它,它都是Linux操作系统的一个发行 ...

  7. C#编程(六十六)----------表达式树总结

    表达式树总结 基础 表达式树提供了一个将可执行代码转换成数据的方法.如果你要在执行代码之前修改或转换此代码,那么它是很有用的.有其是当你要将C#代码----如LINQ查询表达式转换成其他代码在另一个程 ...

  8. c++中 extern

    用例子给你示范 // 1.cpp int x = 10; // 2.cpp 注意没有包含1.cpp #include <iostream> using namespace std; ext ...

  9. Linux进程ID号--Linux进程的管理与调度(三)

    转自:http://blog.csdn.net/gatieme/article/category/6225543 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux- ...

  10. weblogic 12c集群性能测试(与guava13以上版本兼容性问题仍然存在)

    测试了5000并发: