典型情况下的生命周期
我们按照下图的整个流程来介绍下典型情况下的Activity生命周期。
-
onCreate()
方法:表示活动正在创建,进行一些初始化工作。 -
onStart()
方法表示Activity正在启动,已经存在了,但是尚未显示出来 -
onResume()
方法表示Activity已经可见了,显示在前台了,用户已经可以与界面进行交互了
注意:在Activiy创建时,这三个方法在用户看来,是非常迅速的几乎同时完成的,一气呵成,所以没有明显的中间状态
-
onPause()
方法表示该Activity已经不在前台了,可能被半透明的活动遮挡这一份,从而继续保持这个状态;也有可能已经彻底不可见了,此时就会继续执行onStop()
方法。对于,前一种情况而言,如果该Activity在回到前台,就会调用onResume()
方法。我们应当避免,在onPause()
方法中调用cpu密集型的操作,因为下一个启动的Activity的onResume()
方法必须在这个onPause()
方法后才能执行。因此,在onPause()
方法中,我们可以
- 停止动画等消耗cpu的操作
- 提交未保存的修改,当用户希望离开时保存时
- 释放资源
-
onStop()
方法执行时,Activity将由可见转为彻底不可见,此时可以执行一些更加重的释放资源的操作,比如数据库操作等等。此时,如果Activity彻底销毁,就会执行onDestray()
方法;如果Activity重新开始的话,就会执行onRestart()
方法,接着执行onStart()
方法,接着onResume()
方法。 -
onRestart()
方法:表示Activity正在重新启动,一般情况下,当Activity从不可见重新变为可见状态时,onRestart()
方法会被调用。 -
onDestroy
方法:表示Activity即将被销毁,做一些回收工作和资源释放。
异常情况下的生命周期
异常情况总体可分为两种:资源相关的系统配置发生改变导致Activity杀死重建(比如翻转屏幕);内存不足,被杀死。在这两种异常情况下终止时,系统会调用onSaveInstanceState()
来保存当前Activity状态,在onStop()
方法前调用,和onPause()
没有时序关系。
当Activity重新建造后,系统会调用onRestoreInstanceState()
方法,并把Activity销毁时onSaveInstanceState()
保存的Bundle对象作为参数同时传递给onRestoreInstanceState()
方法和onCreate()
方法。因此,我们可以通过这两个方法来判断Acitivity是否被重建了。从时序上说,onRestoreInstanceState()
方法的调用时间在onStart()
方法后。
在考虑到这中情况,我们可以在'onSaveInsanceState()'方法中保存我们在Activity异常关闭时需要保存的东西。然后在重启的onCreate()中取出数据,数据是以Bundle格式存入取出的。