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的测量宽高, ... 
随机推荐
- hdu 3289  最大独立集
			题意:一个动物园里有N只猫和K只狗,一些小朋友来参观,他们如果喜欢狗就不喜欢猫,喜欢猫就不喜欢狗,园长想要移走一些动物,如果,移走的是某个小朋友不喜欢的,而喜欢的没被移走,该小朋友就会高兴,求移动的数 ... 
- 【BZOJ-4556】字符串    后缀数组+二分+主席树 / 后缀自动机+线段树合并+二分
			4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 657 Solved: 274[Su ... 
- Codeforces Round #375 (Div. 2) A. The New Year: Meeting Friends 水题
			A. The New Year: Meeting Friends 题目连接: http://codeforces.com/contest/723/problem/A Description There ... 
- Codeforces Round #258 (Div. 2) C. Predict Outcome of the Game 水题
			C. Predict Outcome of the Game 题目连接: http://codeforces.com/contest/451/problem/C Description There a ... 
- CentOS 7使用yum安装Docker
			安装依赖 # 配置阿里云源 # 备份 cp /etc/yum.repos.d/CentOS-Base.repo{,.bak'_'`date +%Y%m%d_%H%M%S`} # 下载 wget -O ... 
- 在ASP.NET MVC中使用Castle Windsor
			平常用Inject比较多,今天接触到了Castle Windsor.本篇就来体验其在ASP.NET MVC中的应用过程. Visual Studio 2012创建一个ASP.NET MVC 4网站. ... 
- JavaScript进阶系列05,事件的执行时机, 使用addEventListener为元素同时注册多个事件,事件参数
			本篇体验JavaScript事件的基本面,包括: ■ 事件必须在页面元素加载之后起效■ 点击事件的一个简单例子■ 为元素注册多个点击事件■ 获取事件参数 ■ 跨浏览器事件处理 □ 事件必须在页面元素加 ... 
- Delphi XE2 compiler performance
			原文: http://blog.barrkel.com/2011/10/delphi-xe2-compiler-performance.html Delphi XE2 compiler perform ... 
- Windows Phone本地数据库(SQLCE):4、[Column]attribute(翻译) (转)
			这是“windows phone mango本地数据库(sqlce)”系列短片文章的第四篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知 ... 
- DELPHI新的变量的声明方法
			DELPHI新的变量的声明方法 从DELPHI 10.3.1开始支持新的变量声明方法: procedure TForm1.查询1Click(Sender: TObject); begin var ur ... 
