Android

Activity/Fragment 生命周期

2018-02-24  本文已影响0人  Demon鑫

零、资料

一、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修改

上一篇下一篇

猜你喜欢

热点阅读