关于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的销毁流程。

关于onFinishInflate的一些事相关推荐

  1. 遇事不责怪别人,换位思考能成全更好的自己

    在生活中,有时候有些人做的某些事可能会让你感觉不爽:这时,你最好不要急着去责怪他:试着把自己放在对方的处境,看看别人的生活,你才能看到人间百态,理解他人的难处. 每个人的生长环境不同,心境就不同:有些 ...

  2. 力所能及的做些自己喜欢和有趣的事

    我们每个人都有自己喜欢做的事:在自己可控且力所能及的情况下,在闲时,按自己的意愿去做些自己喜欢和有趣的事,会感觉到这事很有意义.在忙时,要为理想和奋斗而忙:不浪费时间在无意义的事和人身上. 朋友要的是 ...

  3. 不要纠结于过去发生的事

    在这个社会中,有些人很早就经历了一些不好的事,遇到不好的人:让他留了一些阴影.这时,应该学会不要纠结于过去发生的事情了!一件事情已经发生了,不管再怎么后悔也不能改变结局: 对这件事一直有懊悔之心,只会 ...

  4. 【运维学习笔记】生命不息,搞事开始。。。

    001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...

  5. 保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事

    保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事 10 things to consider when securing an embedded 802.11 Wi-Fi device 随着 ...

  6. Python爬虫实战糗事百科实例

    爬取糗事百科段子,假设页面的URL是 http://www.qiushibaike.com/8hr/page/1 要求: 使用requests获取页面信息,用XPath / re 做数据提取 获取每个 ...

  7. 关于.NET玩爬虫这些事 【初码干货】

    这几天在微信群里又聊到.NET可以救中国但是案例太少不深的问题,我说.NET玩爬虫简直就是宇宙第一,于是大神朱永光说,你为何不来写一篇总结一下? 那么今天就全面的来总结一下,在.NET生态下,如何玩爬 ...

  8. 《创业维艰分享之五》所有得,有所乐,日事日清,循序渐进。

    这两个月公司连续做了两个大客户紧接着发布新版本再然后又是连续五个小版本迭代计划. 每天16小时的超强度工作,我已经看到兄弟的脸上都写着一个字:累! 我自己又何尝不是,既是客服,又是程序员,还必须是行政 ...

  9. 计算机改变了我们的生活英语作文带翻译,一件事改变了我的生活的英语作文,带翻译,求帮忙,最好是符合初中三年级的英语作文...

    满意答案 niqwe0j8 2020.03.21 采纳率:44%    等级:7 已帮助:57人 One thing that changed my life completely was that ...

最新文章

  1. python代码怎么写出色_如何写出更具有Python风格的代码,五分钟教会你!
  2. 矿用巷道巡检机器人_一种井下自动巡检机器人系统
  3. 游戏里的角色都什么格式图片_二十年前是怎样开发游戏的?
  4. load styles.php,wordpress后台管理超时没反应:load-scripts.php载入缓慢出错
  5. Delphi通过ICMP检测与远程主机连接
  6. 前端学习(1607):跨域请求
  7. 多个字符合并成一个数组_一个excel多个sheet,需要合并为一个sheet
  8. 台式临床化学分析仪行业调研报告 - 市场现状分析与发展前景预测
  9. windows远程桌面无法粘贴复制的问题解决方法
  10. 终于把tomcat给搞定了
  11. oc传参数给js_一道面试题引发关于 js 隐式转换的思考
  12. Onvif协议学习:8、设备校时
  13. 人脸检测-人脸对齐-人脸识别原理及方法
  14. 租房申请html模板,实用的租房房源标题模板
  15. 不要重新发明轮子_重新发明轮子
  16. 基站开站测试软件,基站开通流程及相关规范
  17. 可以叫板Google的一个搜索引擎——DuckDuckGo
  18. AngularJS 的 IE 兼容性
  19. bilibili-网易公开课
  20. PFC电源设计与电感设计计算学习笔记

热门文章

  1. 会议室预约系统遇到的问题
  2. 经验分享:一个 30 岁的人是如何转行做程序员,进入IT行业的?
  3. java string转int 异常_Java中String转int型的方法以及错误处理
  4. rs232通信接口单片机51c语言,AT89C51单片机控制的CAN总线RS232接口电路设计
  5. P2370 yyy2015c01的U盘
  6. 广告牌定时器怎么设置时间_招牌定时器怎么设置时间?简单吗?
  7. 自我方向和计算机考证
  8. socket编程accept函数返回值的理解
  9. 关于iOS10 - iMessage App的总结
  10. 法国大面包mimikatz使用方法