开篇说到了Android四大组件之一的Activity,提到Activity就得提一下它的生命周期。Android官方提供的文档可以给我们提供很大的帮助,下图就是Android官方提供给我们的Activity生命周期图。
通过上图我们不难看出Activity的生命周期从上到下依次为:
onCreate->onRestart->onStart->onResume->onPause->onStop->onDestroy这几个部分。
正常启动一个Activity会依次调用:onCreate->onStart->onResume
当这个Activity按返回键,正常退出时会依次执行:onPause->onStop->onDestroy
当一个Activity正在运行时,弹出一个对话框,此时Activity部分可见会执行:onPause
当对话框消失,Activity又完全可见时会执行:onResume,正如上图所示。
当从第一个Activity跳转到第二个Activity时,第一个Activity会依次执行:onPause->onStop。从第二个Activity返回到第一个Activity,这时第一个Activity会执行:onRestart->onStart->onResume
假设Activity A启动一个Activity B,那么,系统会先调用A的onPause,然后调用B的onCreate、onStart、onResume。然后才会调用A的onStop方法。
因此,在旧的Activity的onPause返回之前,新的Activity不会被创建。因此,这里不要做太费时的事情。
onPause方法中建议做的操作有:停止动画这样大量消耗CPU的动作,使Activity的切换更快速;关掉相机这样独占式访问的资源。
后台Activity因为资源紧张被系统终止时,无论是否可见,都不会调用任何方法,除onSaveInstanceState。
通过android.os.Process.killProcess杀死时,不会调用任何方法,包括onSaveInstanceState。
关于状态保存,根据官方文档如下图所示:
onSaveInstanceState
当Activity被切换到后台(部分可见或者不可见,但己不与用户交互)时,就有可能因为资源紧张而被kill,会调用这个方法。
如果这个方法被调用的话,会在onStop之前,但与onPause谁先谁后不确定。
这个方法的默认实现中,保存了当前可见的View树的状态,重写时,如果要保留这个特性的话,调一下super.onSaveInstanceState。
onRestoreInstanceState
这个方法在onStart和onResume之间被调用。
绝大部分情况下,使用onCreate就可以恢复上一次保存的状态。
本文参考:Activity生命周期与保存状态