Android -- View流程
在自定义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流程的更多相关文章
- Android View的绘制机制流程深入详解(四)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第四篇主要介绍Android自定义View及ViewGroup的实现方法和流程. 主要介绍了自绘控件.自定义组合控件.自定义继承控件 ...
- Android View的绘制机制流程深入详解(三)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第三篇主要介绍并分析视图状态以及重绘流程,首先剖析了 视图的几种状态,然后在深入分析视图的重绘机制流程. 真题园网:http://w ...
- Android View的绘制机制流程深入详解(二)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第二篇主要介绍并分析Android视图的绘制的原理和流程.主要从 onMeasure().onLayout()和onDraw()这三 ...
- Android View的绘制机制流程深入详解(一)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第一篇主要介绍并分析LayoutInflater的原理, 从而理解setContentView的加载原理.对于LayoutInfla ...
- android View层的绘制流程
还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原理,记不记得 ...
- Android View体系(八)从源代码解析View的layout和draw流程
相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...
- Android View 绘制刷新流程分析
Android中对View的更新有很多种方式,使用时要区分不同的应用场合.1.不使用多线程和双缓冲 这种情况最简单,一般只是希望在View发生改变时对UI进行重绘.你只需显式地调用View对 ...
- Android View 绘制流程(Draw) 完全解析
前言 前几篇文章,笔者分别讲述了DecorView,measure,layout流程等,接下来将详细分析三大工作流程的最后一个流程——绘制流程.测量流程决定了View的大小,布局流程决定了View的位 ...
- Android View 布局流程(Layout)完全解析
前言 上一篇文章,笔者详细讲述了View三大工作流程的第一个,Measure流程,如果对测量流程还不熟悉的读者可以参考一下上一篇文章.测量流程主要是对View树进行测量,获取每一个View的测量宽高, ...
随机推荐
- KVM磁盘镜像qcow2、raw、vmdk等格式区别(转)
raw(default) the raw format is a plain binary image of the disc image, and is very portable. On file ...
- HDU 4778 Gems Fight! (2013杭州赛区1009题,状态压缩,博弈)
Gems Fight! Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 327680/327680 K (Java/Others)T ...
- HDU 4737 A Bit Fun (2013成都网络赛)
A Bit Fun Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 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 ...
- 《Go学习笔记 . 雨痕》类型
一.基本类型 清晰完备的预定义基础类型,使得开发跨平台应用时无须过多考虑符合和长度差异. 类型 长度 默认值 说明 bool 1 false byte 1 0 uint8 int, uint 4, ...
- linux内核数据包转发流程(二):中断
[版权声明:转载请保留出处:blog.csdn.net/gentleliu.邮箱:shallnew*163.com] 内核在处理2层数据包之前,必须先处理中断系统.设立中断系统,才有可能每秒处理成千的 ...
- <fmt:formatNumber>标签
<fmt:formatNumber>标签用于格式化数字,百分比,货币. 属性 <fmt:formatNumber>标签有如下属性: 属性 描述 是否必要 默认值 value 要 ...
- 【多线程】java多线程实现生产者消费者模式
思考问题: 1.为什么用wait()+notify()实现生产者消费者模式? wait()方法可以暂停线程,并释放对象锁 notify()方法可以唤醒需要该对象锁的其他线程,并在执行完后续步骤,到了s ...
- python测试开发django-14.查询表结果(超详细)
前言 django查询数据库的方法很多,不同的方法返回的结果也不太一样,本篇详细讲解关于查询的13个方法 返回对象是对象列表的: all(), filter(), exclude(), order_b ...
- POJ 2135 Farm Tour && HDU 2686 Matrix && HDU 3376 Matrix Again 费用流求来回最短路
累了就要写题解,近期总是被虐到没脾气. 来回最短路问题貌似也能够用DP来搞.只是拿费用流还是非常方便的. 能够转化成求满流为2 的最小花费.一般做法为拆点,对于 i 拆为2*i 和 2*i+1.然后连 ...