zoukankan      html  css  js  c++  java
  • Android开发——View的生命周期总结

    0.前言

    今天看到一个概念是View的生命周期,有点懵逼,听说过Activity的生命周期,Fragment的生命周期,对View的生命周期好像没什么概念啊。难道layout、draw这些也算是生命周期的方法吗?因此查阅、整理了一些资料,有了此文。

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

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SEU_Calvin/article/details/72855537
  • 相关阅读:
    没有什么,开发ASP.NET时随便写写,想到什么写什么
    MS SQL Server带有时间的记录怎样查询
    给RadioButtonList绑定Selected的值
    在GridView控件内文本框实现TextChanged事件
    MS SQL Server递归查询
    ASP.NET MVC使用jQuery无刷新上传
    MySQL 慢查询操作梳理
    ubuntu系统下防火墙简单使用
    crontab日常使用梳理
    ubuntu下nginx+php5的部署
  • 原文地址:https://www.cnblogs.com/feng9exe/p/9254741.html
Copyright © 2011-2022 走看看