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都使用到的公共资源的访问顺序就需要考虑上述流程的执行顺序。
     
     
  • 相关阅读:
    VBE2019、VBE2014、VBE2014_VB6三合一的下载、安装和使用(最新版2020.09.09)
    调用其他VBA工程中的过程和函数以及API函数
    QQ消息群发助手SendQQMessage的下载和使用
    VBA/VB6/VBS/VB.NET/C#/Python/PowerShell都能调用的API封装库
    Excel-DNA项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【C#版】
    Excel-DNA项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【VB.Net版】
    VSTO外接程序项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【C#版】
    VSTO外接程序项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【VB.Net版】
    Outlook邮件的右键菜单中添加自定义按钮
    VBA自动点击IE的浏览按钮、自动选择路径、自动关闭打开文件对话框
  • 原文地址:https://www.cnblogs.com/jqctop1/p/5429840.html
Copyright © 2011-2022 走看看