基本介绍
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状态
在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);
}
注意:
- 如果是用户自动按下返回键,或程序调用finish()退出程序,是不会触发onSaveInstanceState()和onRestoreInstanceState()的。
- 每次用户旋转屏幕时,当前Activity将被破坏并重新创建,此时会回调onSaveInstanceState()和onRestoreInstanceState()俩个方法
- onCreate()作为正常生命周期流程,bundle需要判null,而onRestoreInstanceState()方法被回调时bundle无需判断,一定不为null.
网友评论