zoukankan      html  css  js  c++  java
  • Activity的生命周期

    Activity的生命周期

    首先给出Google官方API中的图片:

    注意以下回调方法都是在UI线程中执行的,所以通常不能直接执行耗时的操作。

    onCreate

    • 创建Activity首先要执行onCreate。
    • onCreate中通常执行一些初始化的工作,比如:创建各View组件、绑定数据等。
    • onCreate后一定跟着执行onStart方法。

    onStart

    • Activity即将转入前台变成可见的状态( 此时还不可见)。
    • onStart后可能执行onResume或者onStop方法,若Activity还没来得及转入前台变成可见就被finish了,则后跟执行onStop方法,若Activity成功转入前台变成可见,则后跟执行onResume方法。

    onResume

    • Activity已经转入前台变成可见的状态,获得用户焦点。
    • onResume后一定跟着执行onPause方法。
    • onResume中通常可以执行一些恢复工作,恢复Activity在之前保存的状态。

    onPause

    • 其他Activity即将转入前台,此Activity即将失去焦点。
    • 如果即将转入前台的新Activity会完全遮住此Activity,则onPause后将执行onStop;如果即将转入前台的新Activity不会完全遮住此Activity(非全屏或者透明),则onPause后将执行onResume。
    • onPause中通常可以保存一些持久化的信息,以便在onResume时可以恢复。

    onStop

    • Activity变成完全不可见的状态。
    • onStop中通常执行一些清理工作,比如:注销监听器、关闭线程。
    • onStop执行之后Activity实例对象仍然存活在内存中,若后续用户又希望与此Activity交互,则系统会调用onRestart重新启动此Activity;若系统需要回收内存其占用的内存则会调用onDestory清理。

    onDestory

    • Activity的资源即将被系统回收,这是此Activity在彻底消亡之前的最后一次回调。
    • 调用onDestory可能是系统回收内存调用,也可能是主动调用finish方法导致的。

    onStart到onStop这几个方法随着频繁切换Activity会经常被调用,而对onResume和onPause的调用最频繁,只能执行一些轻量级的操作。onPause、onStop和onDestroy方法中的任意一个执行之后,系统都有可能为了获取更多内存服务高优先级进程而kill掉Activity所属的进程,因此onPause方法是最后能够确保执行的机会,通常在onPause中对一些持久化的信息进行保存。


    Activity还提供了onSaveInstanceState方法,这个方法在onStop之前由系统调用,在这个方法中通常将一些与UI相关的信息保存到Bundle参数中。当以后再次返回该Activity时,系统会在调用onCreate和onRestoreInstanceState时传入之前保存的Bundle对象。需要注意的是onSaveInstanceState方法在用户使用Back键退出此Activity时并不会被调用,通常会在旋转屏幕这种场景下被调用。
    Activity中的大多数View都有默认的onSaveInstanceState实现,用来保存特定View对于相关UI信息的保存,例如:EditText会保存编辑框中的内容、CheckBox会保存选中状态。


    Activity切换过程中的生命周期转换流程
    (ActivityA切换到ActivityB)

    ActivityA.onPause()
    ActivityB.onCreate()
    ActivityB.onStart()
    ActivityB.onResume()
    ActivityA.onStop()

    • 要注意的就是ActivityA的onStop方法在ActivityB执行onResume之后才被执行,对于ActivityA和ActivityB都使用到的公共资源的访问顺序就需要考虑上述流程的执行顺序。
     
     
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 交换Easy
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法训练 矩阵乘方
    QT中给各控件增加背景图片(可缩放可旋转)的几种方法
    回调函数实现类似QT中信号机制
    std::string的Copy-on-Write:不如想象中美好(VC不使用这种方式,而使用对小字符串更友好的SSO实现)
  • 原文地址:https://www.cnblogs.com/jqctop1/p/5429840.html
Copyright © 2011-2022 走看看