美文网首页Android
Activity/Fragment 生命周期

Activity/Fragment 生命周期

作者: Demon鑫 | 来源:发表于2018-02-24 17:05 被阅读0次

    零、资料

    一、Activity/Fragment 生命周期图

    Activity/Fragment 生命周期图

    二、Activity状态

    1. 运行状态 Running
      • 活动处于栈顶时。
      • 系统回收等级最低。
    2. 暂停状态 Paused
      • 活动不再处于栈顶,但仍然可见(即当失去焦点、非全遮挡、透明遮挡时)。
      • 此时状态及变量都还存在。
      • 当内存紧张时,才有可能被系统回收掉。
    3. 停止状态 Stopped
      • 活动不再处于栈顶,并完全不可见。
      • 此时状态及变量都还存在,但并不安全。
      • 当内存紧张时,才有可能被系统回收掉。
    4. 销毁状态 Killed
      • 活动从栈中移除后变为销毁状态。
      • 系统优先回收当前状态的活动。

    三、Activity生命周期

    正常情况

    1. onCreate()
      • 第一次创建。
      • 应该在此完成初始化操作(加载布局、绑定事件等)
    2. onStart()
      • 由不可见变为可见。
      • 并未出现在前台。
    3. onResume()
      • 开始处于运行状态
      • 此时的 Activity 一定位于栈顶。
      • Activity 准备好和用户进行交互的时候调用。
      • 可以在此初始化一些资源,比如重新初始化在onPause()或onStop()中释放的资源。
    4. onPause()
      • 开始处于暂停状态
      • 当系统准备去启动或恢复另一个 Activity 的时候调用。
      • 通常在此将一些消耗CPU的资源释放掉,以及保存一些关键数据。
      • 当前方法执行速度一定要快,不然会影响到新的栈顶活动的使用。
      • 当前方法执行完成后,新 Activity 的onResume方法才会被执行。
    5. onStop()
      • 开始处于停止状态
      • 在 Activity 完全不可见的时候调用。停止或完全被覆盖,仅在后台运行。
      • 可以做一些资源释放的操作(不能太耗时)。
      • 它和onPause()主要区别在于,如果启动的新 Activity 是一个对话框式的 Activity,那么onPause()会得到执行,而onStop()方法并不会执行。
    6. onDestroy()
      • 开始处于销毁状态
      • Activity 被销毁之前调用。
    7. onRestart()
      • 重新启动。
      • Activity 由停止状态变为运行状态之前调用。

    重建情况

    1. onSaveInstanceState()

      • 当 Activity 在异常终止时系统调用。
      • 把需要保存的数据保存到 Bundle。
    2. onRestoreInstanceState()

      • 当 Activity 异常终止后被重建后调用。
      • 还原异常终止时保存的 Bundle。

    注意:
    1. 异常情况系统自动为我们做了一定的恢复工作。
    eg:视图结构、文本框数据、ListView滚动位置、View状态等。
    2. 当资源发生改变、内存不足杀死 Activity 时为重建情况。

    复用情况

    1. onNewIntent()
      • singleTop、singleTask、singleInstance 三种启动重复启动时会调用。

    四、避免重建

    指定 Activity configChanges属性可以避免重建。

    android: configChanges=""
    

    configChanges 的项目和含义

    项目 含义
    locale 设备的本地位置发生了改变,一般指切换了系统语言
    keyboard 健盘类型发生了改变,比如用户使用了外插键盘
    keyboardHidden 键盘的可访问性发生了改变,比如用户调出了键盘
    fontScale 系统字体缩放比例发生了改变,比如用户选择了一个新字号
    orientation 屏幕方向发生了改变,这个是最常用的,比如旋转了手机屏幕

    五、Activity生存期

    1. 完整生存期

      • 活动在onCreate() ~ onDestroy()的所经历。
      • 一般情况下,一个活动会在onCreate()中完成各种初始化操作,而在onDestroy()中完成释放内存的操作。
    2. 可见生存期

      • 活动在onStart() ~ onStop()的所经历。
      • 我们可以通过这两个方法,合理地管理那些对用户可见的资源。比如在onStart()中对资源进行加载,而在onStop()中对资源进行释放。
    3. 前台生存期

      • 活动在onResume() ~ onPause()的所经历。
      • 在前台生存期内,活动总是处于运行状态。
      • 此时的活动是可以和用户进行交互。

    2018/02/24,2019/10/15修改

    相关文章

      网友评论

        本文标题:Activity/Fragment 生命周期

        本文链接:https://www.haomeiwen.com/subject/kyqcxftx.html