第一篇:Activity生命周期

基本介绍

Activity是Android的四大组件之一。负责提供与用户可进行交互的屏幕,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。此组件是我们最常使用的组件,下面我们来介绍下其各生命周期方法的含义。

生命周期

方法
onCreate() 当Activity第一次创建时调用。该方法(如果有)会提供给你一个包含之前活动的冻结状态信息bundle包。
onStart() 该方法代表Activity正在被启动,此时Activity已经可见,但是此时Activity还未到前台,因此用户还无法看到,无法响应用户的交互动作
onResume() 该方法表示Activity已经经过前面步骤创建完成,此时,Activity已经可见并且已经来前台,用户能够看到界面并且能够进行交互操作并获得响应。
onPause() 该方法代表Activity准备暂停,此时,Activity虽然还是可见状态,但是已失去屏幕的焦点不能再与用户进行交互操作。如:我们在当前Activity弹出一个Dialog(注:此方法不易做耗时工作,会影响下一个Activity界面的打开)
onStop() 该方法代表Activity准备停止。当前Activity已经不在前台展示,对于用户来说是不可见的。(注:此方法不易做耗时工作)
onDestory() 当Activity被销毁时调用。此方法调用,代表Acvtivity已经被销毁,移除任务栈,生命周期已经结束。
onRestart() 该方法代表Activity正在重新启动,一般情况下,在当前Activity从不可见重新变为可见的状态时onRestart就会被调用。这种情形一般是由于用户的行为所导致的,比如用户按下Home键切换到桌面或者打开了一个新的Activity(这时当前Activity会暂停,也就是onPause和onStop被执行),接着用户有回到了这个Activity,就会出现这种情况。
activity_lifecycle.png

Activity状态

在Activity的运行期间总共包含四种工作状态,分别是Running、Paused、Stopped、killed。这四种状态涵盖了整个Activity的生命周期,具体如下图:

page2.png

系统进程与Activity状态之前关系

系统终止进程的可能性 进程状态 Activity 状态
前台进程(拥有或即将获得焦点) onCreate()、onStart()、onResume()
后台进程(失去焦点) onPause()
后台进程(不可见) onStop()
空进程 onDestory()

非正常情景下生命周期

当 Activity因系统限制被销毁时,系统会调用 onSaveInstanceState() 方法,并将 Activity 中需要保存的数据(比如 View 状态 或者我们自己的数据)保存到这个方法的参数 Bundle 中。系统在用户需要时会对此Activity进行重新创建并恢复销毁前的状态,此时,会调用onCreate()和onRestoreInstanceState()俩个回调方法。我们可以通过回调方法的Bundle参数,来恢复我们之前保存的状态。

onSaveInstanceState()示例:

static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putInt(STATE_SCORE, currentScore);
    savedInstanceState.putInt(STATE_LEVEL, currentLevel);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

onRestoreInstanceState()示例:

public void onRestoreInstanceState(Bundle savedInstanceState) {
    // Always call the superclass so it can restore the view hierarchy
    super.onRestoreInstanceState(savedInstanceState);

    // Restore state members from saved instance
    currentScore = savedInstanceState.getInt(STATE_SCORE);
    currentLevel = savedInstanceState.getInt(STATE_LEVEL);
}

注意:

  1. 如果是用户自动按下返回键,或程序调用finish()退出程序,是不会触发onSaveInstanceState()和onRestoreInstanceState()的。
  2. 每次用户旋转屏幕时,当前Activity将被破坏并重新创建,此时会回调onSaveInstanceState()和onRestoreInstanceState()俩个方法
  3. onCreate()作为正常生命周期流程,bundle需要判null,而onRestoreInstanceState()方法被回调时bundle无需判断,一定不为null.

你可能感兴趣的:(第一篇:Activity生命周期)