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都使用到的公共资源的访问顺序就需要考虑上述流程的执行顺序。
     
     
  • 相关阅读:
    使用vue来开发一个下拉菜单组件(2)
    使用vue来开发一个下拉菜单组件(1)
    在Vue中引入Bootstrap,Font-awesome
    九宫格表格样式
    web upload 上传多张图片实例
    input 的multiple 上传多个文件
    常用 验证码 JS 代码
    最全 H5 form 表单 + 正则验证
    mysql的指令
    Ant编译MapReduce程序
  • 原文地址:https://www.cnblogs.com/jqctop1/p/5429840.html
Copyright © 2011-2022 走看看