详解android之activity的生命周期

android中用到最多的就是activity,它也是android的四大组件之一,开发过程中也是最常用到的组件,所以我们有必要去掌握它在程序运行的生命周期是怎么回事

在了解activity的生命周期之前,先了解下它的活动状态,每个活动在生命周期中最多会有四种状态:

  1. 运行状态
    当一个活动位于任务栈的栈顶时,则该活动处于运行状态

  2. 暂停状态
    当一个活动不再处于栈顶位置,但依然可见时,则该活动就进入了暂停状态

  3. 停止状态
    当一个活动不再处于栈顶位置,并且完全不可见的时候,这时该活动就进入了暂停状态

  4. 销毁状态
    当一个活动从任务栈中移除后就变成了销毁状态

在了解完活动状态后,再来看下活动的生命周期,activity类中定义了有七个回调方法,下面类介绍下这七个回调方法:

  1. onCreate()
    这个方法在activity出现的次数最多了,在活动中我们都会重写这个方法,它在活动第一次被创建的时候调用,所以在方法中完成活动的初始化操作,比如加载布局文件、初始化View、事件绑定等。

  2. onStart()
    在活动在屏幕上由不可见变为可见的时候该方法被调用。在这个时候界面是不可交互的。

  3. onResume()
    在活动准备好可以和用户进行交互的时候该方法被调用。此时的活动是处于任务栈的栈顶,并且处于运行状态

  4. onPause()
    在活动处于可见但不可见交互时候该方法被调用。在这个时候我们可以通过在这个方法中将一些消耗CPU的资源释放掉,以及保存活动状态。

  5. onStop()
    在活动完全不可见的时候该方法被调用。也就是完全被另一个活动覆盖了。

  6. onDestroy()
    活动被销毁之前调用。这之后活动就将变为销毁状态

  7. onRestart()
    在活动重新启动,也就是说该活动由停止状态变为运行状态时调用。

以上这个七个方法除了onRestart()方法之外,其他方法都是一一对应的,从而分为三类:

第一类:**onCreate()onDestroy()**两个方法是对应,onCreate()方法中完各种初始化操作,在onDestroy()方法中释放内存等操作。

第二类:**onStart()**和 **onStop()**两个方法对应,在这两个方法之间活动对于用户来说总是可见的。我们也可以通过这个两个方法类合理的管理对用户可见的资源,比如在onStart()方法中对资源的加载,在onDestroy()方法中对资源的释放,保存处于停止状态的活动不会占用过多的内存。

第三类:**onResume()onPause()**两个方法对应,在两个方法之间活动处于运行状态的并且可以和用户进行交互。


以上就是activity生命周期的理论知识,我们通过实践,看activity的七个回调方法在那种情况下会被调用,这也是我们在实际开发中所遇到的各种情况。

  • 第一种情况:当启动AActivity执行生命周期的情况:

    启动activity
    上图可以看到,当AActivity第一次启动的时候会一次执行onCreate()–>onStart()–>onResume()

  • 第二种情况:关闭AActivity时情况:

    关闭activity
    上图可以看出,关闭一个活动依次执行AActivity的onPause()–>onStop()–>onDestroy()

  • 第三种情况:在AActivity界面中按home键,然后在进入AActivity时执行生命周期情况:

    详解android之activity的生命周期_第1张图片
    如上图,按住home键时依次执行AActivity的onPause()–>onStop()
    在返回到AActivity界面的时候依次执行了AActivity的onRestart()–>onStart()–>onResume(),在这里注意下,应该AActivity活动处于停止状态,所以执行了onRestart()方法,而onCreate()方法不会执行,是因为AActivity并没有重新创建。

  • 第四种情况:在AActivity界面中按锁屏键,然后在进入AActivity时执行生命周期情况:

    详解android之activity的生命周期_第2张图片
    如上图,在按住锁屏键和home键执行的生命周期是一样的,这里可以说明两个方式执行都是让AActivity活动变成停止状态,在进入时让AActivity活动从停止状态变成运行状态。

  • 第五种情况:从AActivity启动BActivity执行情况:

    详解android之activity的生命周期_第3张图片
    如上图,在AActivity启动BActivity时,先后执行了AActivity的onPause()–>然后执行BActivity的onCreate()–>onStart()–>onResume()–>最后再执行AActivity的onStop()

  • 第六种情况:从BActivity中返回到AActivity时执行情况:

    详解android之activity的生命周期_第4张图片
    如上图可以看出,在BActivity返回到AActivity时先后执行了BActivity的onPause()–>然后执行AActivity的onRestart()–>onStart()–>onResume()–>再执行BActivity的onStop()–>onDestroy(), 前面也提到了,这里还是要注意,之前AActivity处于停止状态,所以onRestart()方法会被执行,但是AActivity得onCreate()方法不会执行, 因为AActivity并没有重新创建。

  • 第七种情况:从AActivity启动一个Dialog的Activity(在这里称为DActivity),然后在返回AActivity时执行情况:

    详解android之activity的生命周期_第5张图片
    如上图,在AActivity启动一个Dialog的Activity (这里注意了,这个DActivity是带有Dialog的透明背景的Avtivity,如果在AActivity上直接弹出Dialog则AActivity的生命周期都不会执行,因为在直接弹出Dialog时相当于在Window添加了一个View,所以不会对AActivity的生命周期有任何影响) 先后执行AActivity的onPause()–>然后执行DActivity的onCreate()–>onStart()–>onResume(),在这里可以看出AActivity界面是可见的,所以只执行了AActivity的onPause()方法
    在DActivity返回到AActivity的时候,先后执行了DActivity的onPause()–>然后执行AActivity的onResume()–>再执行DActivity的onStop()–>onDestroy()。

还有一些情况,当AActivity上带有一个Dialog时,按住home键执行的生命周期和情况三一样,按住锁屏键和情况四一样,这里就不做演示了

以上就是Activity活动所有生命周期调用情况,相信你通过上面的了解,对activity活动的生命周期有了更深入的了解。

你可能感兴趣的:(Android,技术总结)