关于onFinishInflate的一些事

article/2025/10/3 13:08:00

关于onFinishInflate的一些事

这个方法相信大家都不会陌生,大家都知道这个方法在onCreate之后执行,要拿到控件宽高要onWindowFocusChanged方法之后才能拿到,平时自定义控件的时候自己也用的不少。但是今天接口有一个要求,让请求每次进这个页面的时候都发一次,我看了一下请求,是写在onFinishInflate里面的,请求只有第一次进入这个页面的时候会发,从下一个栈级返回的时候请求并不会发,一开始我还纳闷这个方法不是每次进入页面都会发的么,后面特意验证了一下

场景:A->B->C,AB两个页面都调用了相同的自定义控件,当第一进入A、B时,调用onFinishInflate,当C->B时,C页面出栈,B页面到栈顶并不会调用onFinishInflate
在这里插入图片描述

如图所示,从A->B->C->B->A,照理应该打印四次,但是实际只打印了两次

/*** Finalize inflating a view from XML.  This is called as the last phase* of inflation, after all child views have been added.** <p>Even if the subclass overrides onFinishInflate, they should always be* sure to call the super method, so that we get called.*/
@CallSuper
protected void onFinishInflate() {
}

看源码,当XML布局文件被布局加载完,所有子控件均被映射之后,才会回调这个方法,但是C页面出栈,B页面到栈顶时,B页面在入栈时已经加载过了,就没有再加载一次调用这个方法。

附录:VIEW的生命周期

1.View生命周期相关方法

View的生命周期从构造方法开始依次执行以下几个方法,该View的可见性为默认值时:

(0)Constructors()

View在代码中被创建时调用第一种构造方法,View从layout中加载出来时会被调用第二种构造方法,其中XML中的属性也会被解析。

(1)onFinishInflate()

该方法当View及其子View从XML文件中加载完成后触发调用。通常是在Activity中的onCreate方法调用后调用。

(2)onVisibilityChanged()

该方法在当前View或其祖先的可见性改变时被调用。如果View状态不可见或者GONE,该方法会第一个被调用。

(3)onAttachedToWindow()

当View被附着到一个窗口时触发。在Activity第一次执行完onResume方法后被调用。

(4)onMeasure()

该方法确定View以及其子View尺寸大小时被调用。

(5)onSizeChanged()

该方法在Measure方法之后且测量大小与之前不一样的时候被调用。

(6)onLayout()

该方法在当前View需要为其子View分配尺寸和位置时会被调用。

(7)onDraw(Canvas)

该方法用于View渲染内容的细节。

(8)onWindowFocusChanged()

该方法也可能在绘制过程中被调用,具体是在包含当前View的Window获得或失去焦点时被调用。此时可以设置代码中定义的View的一些LayoutParameter。

如果View进入了销毁阶段,肯定是会被调用的。

(9)onWindowVisibilityChanged()

该方法同上,具体是在包含当前View的Window可见性改变时被调用。

(10)onDetachedFromWindow()

当View离开附着的窗口时触发,比如在Activity调用onDestroy方法时View就会离开窗口。和一开始的AttachedToWindow相对,都只会被调用一次。

因此可以总结为:

(1)在Activity的onCreate方法中加载View,View的onFinishInflate会被调用,继而Activity的生命周期执行到onResume方法之后View才被附着到窗口上,继而进行绘制工作,onMeasure、onSizeChanged 、onLayout、onDraw。这几个方法可能由于setVisible或onResume被调用多次,最后是Window失去焦点后的销毁阶段。

(2)onVisibilityChanged()方法在View是可见状态时如上所示时机调用,但是View的状态如果是不可见或者GONE时,是首先被调用的。如果是Invisible状态,View的创建到layout即结束,不会绘制出来。如果是GONE状态,View也会被加载并添加到Window,但是不会再Measure、Layout和Draw了。也就时说即使是GONE状态,销毁时一样有Detach的过程,即View的销毁过程和可见性无关。

2.View其他的一些生命周期相关方法

onFocusChanged()

该方法在当前View获得或失去焦点时被调用。

onKeyDown()

该方法在有按键按下后被调用。

onKeyUp()

与上面对应,该方法在有按键按下后弹起时触发。

onTrackballEvent()

该方法在一个轨迹球运动事件发生时被调用。

onTouchEvent()

该方法在触屏事件发生时被调用。

onSaveInstanceState()

这个方法就不用说了,在Activity被Pause的时候被调用。被Pause后回到界面时View就没方法被调用了。只有在比如Activity被销毁时进入View的销毁流程。


http://chatgpt.dhexx.cn/article/qqjS25ol.shtml

相关文章

编写Pascal代码

编写Pascal代码 注释 在Pascal中&#xff0c;注释括在大括号中或带星号的圆括号中。Delphi 也认可C 风格的注释&#xff0c;即把注释放在双斜线后。例如 {this is a comment} (* this is another comment *) // this is a comment up to the end of the line第一种注释方式较简…

PASCAL程序设计语言 PDF 分享

链接:https://pan.baidu.com/s/1cflbic-tCaG0csUiaHFABA 560d 相关推荐 Go 语言程序设计 中文编程学习进阶 易语言编程系统 Python高级编程 Java数据结构和算法 Java编程思想(第4版) PASCAL 语言是第一个体现结构化程序设计概念的计算机语言,因此它在 60 年代

pascal语法介绍

数据挖掘之数据初步探索 1. 汇总统计 众数&#xff1a;具有最高频率的值&#xff0c;针对离散型数据 百分位数&#xff1a;计算方法&#xff08;3&#xff0c;4.3&#xff0c;6.2&#xff0c;6.5&#xff0c;7.6&#xff0c;7.8&#xff0c;8.1&#xff0c;9.6&#xff0c;1…

pascal语言基础(三)

该内容为学习 《PASCAL程序设计 第2版》郑启华编著 的笔记&#xff0c;部分与c语言对比学习&#xff0c;方便记忆。 pascal语言基础&#xff08;一&#xff09; pascal语言基础&#xff08;二&#xff09; 集合类型 定义 TYPE<集合类型标识符> set of <基类型&g…

pascal语言基础(二)

该内容为学习 《PASCAL程序设计 第2版》郑启华编著 的笔记&#xff0c;部分与c语言对比学习&#xff0c;方便记忆。 pascal语言基础&#xff08;一&#xff09; 函数与过程程序设计 函数 1. 定义&#xff1a; FUNCTION <函数名>(<参数表>):<函数类型>;&…

pascal语言基础(一)

该内容为学习 《PASCAL程序设计 第2版》郑启华编著 的笔记&#xff0c;部分与c语言对比学习&#xff0c;方便记忆。 pascal语言基础&#xff08;二&#xff09; 基本介绍 保留字&#xff08;35个&#xff09; AND、ARRAY、BEGIN、CASE、CONST、DIV、DO、DOWNTO、ELSE、END、…

PASCAL语言的基本知识

Pascal是一种计算机通用的高级程序设计语言。它由瑞士Niklaus Wirth教授于六十年代末设计并创立。 以法国数学家命名的Pascal语言。现已成为使用最广泛的基于DOS的语言之一。其主要特点有&#xff1a;严格的结构化形式&#xff1b;丰富完备的数据类型&#xff1b;运行效率高&am…

C语言assert()函数用法总结

&#xfeff;&#xfeff; assert宏的原型定义在<assert.h>中&#xff0c;其作用是如果它的条件返回错误&#xff0c;则终止程序执行&#xff0c;原型定义&#xff1a; #include <assert.h> void assert( int expression ); assert的作用是现计算表达式 expression…

C语言assert函数完全攻略

断言assert函数&#xff0c;C语言assert函数完全攻略 对于断言&#xff0c;相信大家都不陌生&#xff0c;大多数编程语言也都有断言这一特性。简单地讲&#xff0c;断言就是对某种假设条件进行检查。在 C 语言中&#xff0c;断言被定义为宏的形式&#xff08;assert(expressio…

python assert函数解析(最清晰的解释)

欢迎关注WX公众号&#xff1a;【程序员管小亮】 python assert的作用&#xff1a; assert函数用于程序调试 Python 官方文档解释https://docs.python.org/3/reference/simple_stmts.html#assert “Assert statements are a convenient way to insert debugging assertions …

C++中的assert用法

assert用法 void assert(int expression);C中assert&#xff0c;即断言&#xff0c;可以在程序调试阶段检查错误&#xff0c;常用的就比如函数传参时&#xff0c;若是整型&#xff0c;是否超出范围&#xff1b;若是字符串型&#xff0c;地址是否为空等。 在正常时&#xff0c;…

assert()函数(断言函数)

assert()函数&#xff08;断言函数&#xff09; 一&#xff0c;快速了解一下assert函数 void assert (int expression);//括号里面是一个表达式。assert函数是一个宏。 括号里面的表达式如果为真&#xff0c;程序正常执行。 如果函数形式的宏的参数表达式比较等于零&#x…

c语言中assert函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询 1、assert将通过检查表达式expresion的值来决定是否需要终止执行程序。 2、如果表达式expresion的值是假的(即0)&#xff0c;它将首先向标准错误流stderr打印错误信息。 通过调用abort函数终止程序运行。否则&#xff0c;assert没有…

assert()函数

今天&#xff0c;遇到一个函数返回值时引用&#xff0c;但是返回值存在为NULL的情况。下面是搜到的解决方案 然后&#xff0c;就搜了搜assert()函数的用法&#xff0c;找到一篇&#xff0c;贴在下面assert()函数用法总结 assert宏的原型定义在<assert.h>中&#xff0c;其…

assert()函数用法总结

assert宏的原型定义在<assert.h>中&#xff0c;其作用是如果它的条件返回错误&#xff0c;则终止程序执行&#xff0c;原型定义&#xff1a; #include <assert.h> void assert( int expression ); assert的作用是现计算表达式 expression &#xff0c;如果其值为假…

assert断言函数简介

目录 &#x1f38d;1.整体介绍 &#x1f38d;2.assert() 的用法和机制 &#x1f38d;3.关于NDEBUG 宏 &#x1f38d;4.使用assert()注意事项 &#x1f38d;4.1使用 assert() 时&#xff0c;被检测的表达式最好不要太复杂 &#x1f38d;4.2不要用会改变环境的语句作为断言…

第十二章 C语言调试_assert断言函数

在我们的实际开发过程之中&#xff0c;常常会出现一些隐藏得很深的BUG&#xff0c;或者是一些概率性发生的BUG&#xff0c;通常这些BUG在我们调试的过程中不会出现很明显的问题&#xff0c;但是如果我们将其发布&#xff0c;在用户的各种运行环境下&#xff0c;这些程序可能就会…

c语言之assert()函数用法总结

1.assert宏的原型定义在<assert.h>中&#xff0c;其作用是如果它的条件返回错误&#xff0c;则终止程序执行。 库函数&#xff1a; assert.h 原型定义&#xff1a; void assert( int expression ); assert的作用是现计算表达式 expression &#xff0c;如果其值为假&…

接私活必备!国外5个顶级程序员接私活网站

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 人生交契无老少&#xff0c;论交何必先同调。 文章目录 PeoplePerHour&#xff1a;薪酬最高的专业自由职业者网站GuruFreeLancerUpworkFiverr 话说程序员这个职业有…

关于网上程序员接私活的问题

点击上方“程序人生”&#xff0c;选择“置顶公众号” 第一时间关注程序猿&#xff08;媛&#xff09;身边的故事 文丨eachfeel 很多人都谈网上接私活这件事&#xff0c;其实大家想法都差不多&#xff0c;现在做软件的那么多&#xff0c;工资也不是那么高了&#xff0c;不像以前…