关于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. 什么检索是借助计算机技术进行自动标引的,自动文献检索系统
  2. java读取对象失败_jsp exception对象获取异常信息
  3. SSM 整合开发初见面
  4. 网络知识和交换机的基本配置知识培训
  5. React Native : AsyncStorage 存储
  6. ubuntu20.04下开发海康威视网络摄像头sdk(一)运行示例程序
  7. 主题:讲解三层代码讲解--第三课(*****) DATE:2004-05-28
  8. 在微信上直播的优势有那些
  9. Validator校验器中重新定义默认的错误信息模板
  10. 淘宝开放平台技术历程
  11. 谈谈UG二次开发程序入口
  12. 递归实现顺序输出整数
  13. 实验吧-简单的登录题——WriteUp再研究
  14. selenium报错信息-- Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案...
  15. 共阳极、共阴极数码管编码表(0~9、A~P……全亮)
  16. 在若依项目中添加导入excel功能
  17. 利用360安全卫士的“网络连接查看器”获取网络游戏的服务器IP地址
  18. 【UFUN开发板评测】小巧而不失精致,简单而不失内涵——uFun开发板开箱爆照
  19. 几种优化算法(求最优解)
  20. java 阶乘后几位,java阶乘计算获得结果末尾0的个数代码实现

热门文章

  1. 网页制作任务二:课表
  2. MD5算法原理及其实现
  3. 看门狗的使用方法和作用
  4. 【Linux常用指令合集】
  5. 流媒体服务器EasyNVR怎样获取视频流的播放地址?
  6. 【Python之numpy库】5.np.piecewise 操作方程
  7. Linux系统入门学习书籍
  8. 【方法】搭建自己的个人博客主页
  9. 聚焦医疗人工智能,TPP助力“健康中国2030”建设
  10. 报错警告FilterDispatcher is deprecated! Please use the new filters!