Activity的生命周期
Activity通过一个Activity栈来进行管理。当一个新的Activity启动的时候,它会首先被放置在Activity栈顶部,并且该 Activity的状态为Running,之前的Activity也在Activity栈中,但是被保存在它的下边,只有当这个新的Activity推出之后,以前的Activity才能重新回到前景界面。
Activity有四种基本状态:
Active/Running:一个新的Activity启动入栈之后,它位于屏幕的最前端,Activity栈的最顶端,此时它处于可见并可以和用户交互的状态。
Paused:Activity失去了焦点,但仍然可见,这时为Paused状态。例如,被另一个透明的或者Dialog样式的Activity覆盖时的状态。因为失去了焦点,故不可与用户交互。
Stopped:当Activity被另一个Activity完全覆盖、失去焦点,并不可见,这叫处于Stopped状态,它仍然保持着所有的状态和成员 信息,但对于用户来讲,它是不可见的。当系统内存需要被用在其他地方的时候,Stopped的Activity将被杀掉。
Killed Activity:被系统杀死回收或者没有被启动时处于Killed状态。Activity为Paused或者Stopped状态,系统需要清理内存时, 可以通过finish或者kill结束其进程。当需要重新显示时,必须完全启动,并将其关闭之前的状态全部恢复。
Activity有三个关键的生命周期:
1. 完 整生命周期,从onCreate(Bundle)开始到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在 onDestory()释放所有的资源。例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在 onCreate()中创建线程,在onDestory()中停止线程。
2. 可见的生命周期,从onStart()开始到 onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的 UI数据和资源等,例如:可以在onStart中注册一个IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在 onStop()中注销它。onStart(),onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。
3. 前 台的生命周期,从onResume()开始到onPause()结束。在这段时间里,该Activity处于所有 Activity的最前面,和用户进行交互。Activity可以经常性地在resumed和paused状态之间切换,例如:当设备准备休眠时,当一个 Activity处理结果被分发时,当一个新的Intent被分发时。所以在这些接口方法中的代码应该属于非常轻量级的。
Activity类中定义了8个方法,可以通过重写这些方法达到在Activity转改改变时执行你所期望的操作。当实现这些方法是,需要注意的是一定要调用父类的对应方法。
public class Activity extendsAplicationContext {
protected void onCreate(Bundle icicle);
protected void onStart();
protected void onResume();
protected void onFreeze(Bundle outIcicle);
protected void onPause();
protected void onStop();
protected void onDestroy();
}
上述方法的含义用下表解释:
方法 | 描述 | 完成后可否被杀掉? | 下一个方法 |
onCreate(Bundle) | Activity初次创建时调用该方法。一般情况下,我们会重写该方法,并作为应用程序的入口,在这个方法中可以进行初始化数据、设置用户界面等操作。大多数情况下,我们需要在这里加载用户界面xml资源文件,例如setContentView(R.layout.main),如果Activity之前存在冻结状态,那么此状态将在Bundle中提供,如果Activity首次创建,本方法后将会调用onStart()方法,如果Activity是停止后重新显示,将调用onRestart()方法。 | 否 | onStart() |
onStart() | 该方法在onCreate()方法之后被调用,或者在从Activity从Stopped状态转换为Active状态时调用。其后调用onRestart()方法或者onResume()方法。 | 否 | onResume() onStop() |
onRestart() | 当Activity从停止状态重新启动时调用。其后调用Resume()方法。 | 否 | onStart() |
onResume() | 当Activity将要与用户交互时调用此方法,此时Activity在栈顶,用户输入已经可以传递给它。如果其它的Activity在它的上方恢复显示,则将调用onFreeze()方法。 | 否 | onPause() |
onFreeze(Bundle) | 当Activity暂停,其它的Activity恢复与用户交互的时候调用这个方法。 | ||
onPause() | 当系统要调用其他的Activity时调用,一般该方法用来提交数据的改变,停止动画,和其它占用CPU资源的东西。如果Activity重新回到前景则调用onResume()方法,如果对用户彻底不可见则调用onStop()方法。 | 是 | onResume() onStop() |
onStop() | 当其他Activity恢复并遮盖此Activity,导致此用户不可见时调用。当Activity重新回到前景与用户交互时调用onRestart()方法,如果Activity将退出则调用onDestroy()方法。 | 是 | onRestart() onDestroy() |
onDestroy | 在Activity被销毁前调用的最后一个方法,当进程终止时会出现这种情况(调用Activity提过的一个finish()方法或者系统为了节省空间而临时销毁Activity的实例,可以通过isFinishing()方法返回值区分这两种情况)。 | 是 | 无 |