Android进阶干货铺(一)——Activity的生命周期

一、典型情况下生命周期

Android进阶干货铺(一)——Activity的生命周期_第1张图片
Activity 生命周期大家应该非常熟悉,值得注意的是,onCreate 和 onDestroy 配对,标识 Activity 的创建与销毁; onStart 和 onStop 配对,标识 Activity 是否可见;onResume 和 onPause 配对,标识 Activity 是否在前台,可交互。

一个典型的生命周期:onCreate ->onStart -> onResume ->onPause -> onStop ->onDestroy

Android进阶干货铺(一)——Activity的生命周期_第2张图片
注意:
1. onPause 和 onStop 通常连续执行,除了:启动一个新的透明主题 Activity,原 Activity 的 onStop 方法不会被回调(依然可见);
2. 从 Activity A 进入到 Activity B,回调顺序是 onPause(A) -> onCreate(B) -> onStart(B) -> onResume(B) -> onStop(A),所以不能在 onPause 方法中做重量级的操作。因为 onPause(A) 执行完后新 Activity 才能启动。
3. 按back键回退,属于正常情况,执行 onPause -> onStop -> onDestroy,并不是下面所要讲的异常情况。

二、异常情况下生命周期

所谓的异常情况,通常指的是手机配置改变(见第3条)和因内存不足导致被系统回收(见4)。

  1. onSaveInstanceState 方法会在按Home键或者启动新 Activity 以及 Activity 被异常终止时触发调用。 Activity 被异常终止的情况下,它的调用时机是在 onStop 之前,它和 onPause 方法没有既定的时序关系。当 Activity 被重新创建的时候,onRestoreInstanceState 会被回调,它的调用时机是 onStart 之后。非异常终止时,不调用 onRestoreInstanceState。
    “系统只会在 Activity 即将被销毁并且有机会重新显示的情况下才会去调用 onSaveInstanceState 方法。”

  2. 调用 onSaveInstanceState 与 onRestoreInstanceState 来储存和恢复的数据,比如文本框中用户输入的数据、listview 滚动的位置等,这些 view 相关的状态系统都会默认为我们恢复。具体针对某一个 view 系统能为我们恢复哪些数据可以查看 view 的源码中的 onSaveInstanceState 和 onRestoreInstanceState 方法。

  3. android:configChanges=”xxx”属性,常用的主要有下面三个选项:

    • local: 设备的本地位置发生了变化,一般指切换了系统语言;
    • keyboardHidden: 键盘的可访问性发生了变化,比如用户调出了键盘;
    • orientation: 屏幕方向发生了变化,比如旋转了手机屏幕。

    • 配置了 android:configChanges=”xxx”属性之后,Activity就不会在对应变化发生时重新创建,而是调用 Activity 的 onConfigurationChanged 方法。

  4. Activity 优先级(不易被回收程度):前台 Activity > 可见但非前台 Activity > 后台 Activity。

你可能感兴趣的:(Android干货铺)