<strong>1、Activity的生命周期分析</strong>
1.1、activity的生命周期可以理解成两种情况,第一种情况的正常情况下的生命周期,另一种则是异常情况下的声明周期。之所以这样分类是因为:通常在用户完整的操作参与下,activity所经历的声明周期变化是一次完整的过程,从oncreat-->onStart-->onResume-->onPause-->onStop-->onDestroy,异常情况下通常是指系统内存不足导致回收该activity或者当前设置的Configuration发生改变从而导致activity被销毁重建(比如横竖屏切换),这种异常情况下,activity所经历的生命周期是比较复杂的。
<strong>正常情况下的生命周期会经历如下过程。</strong>
(1) onCreate:此时activity正在被创建,这是activity所经历的第一个回调方法。通常在这个函数里,我们可以做一些初始化操作:加载布局资源、设置数据等等。
(2) onStart: 此时activity正在被启动,但是并没有出现在前台(关于并未出现在前台,其意我理解为并未获得窗口焦点,也就是不能被操作),还没有出现在前台,也就意味着用户无法与其交互。这么说吧,activity已经显示出来了,但是还看不到,不能交互和操作。
(3) onResume: 此时activity已经出现在前台并且获得窗口焦点了,可以与用户进行交互了。
(4) onPause: 当启动新的activity或者用户按下home键,此方法将被调用。此时可执行一些轻量级的操作,比如数据存储,停止动画等等,但是不能太耗时,否则将影响新的activity的显示,onPause必须先执行,新activity的onResume才会执行。
(5) onStop: 此时activity即将停止,可以做一些稍微重量级的回收操作,同样的不能太耗时。
(6) onDestroy:此时activity将被销毁,这是activity生命周期最后一个回调函数,可以执行一些资源释放和回收工作。
(7) onRestart: 此时表示activity正在重新启动。当activity从不可见重新变回可见状态时,该回调会被执行。该情况一般时用户行为触发的,比如用户从桌面返回activity或者从另一activity返回当前activity,就会触发该回调的执行。接着执行onStart方法,该activity重新回到前台。
如下图:描述的是activity各种生命周期的切换过程。
<strong>1.2、针对上图,附加几点说明:</strong>
(1)当一个activity第一次启动,回调如下:onCreate-->onStart-->onResume;
(2)当用户打开新的activity或者按下home键回到桌面时,回调如下:onPause-->onStop;注意这里有一种特殊情况,当新的activity采用的主题是透明主题,那么当前activity将不执行onStop函数。
(3)当从新的activity或者从桌面回到原activity时,回调如下:onRestart-->onStart-->onResume;
(4)当用户按下back键回退时,回调如下:onPause-->onStop-->onDestroy;
(5)从完整的一次生命周期来说,onCreate和onDestroy函数始终只会执行一次;从activity是否处于可见来说,onStart和onStop是配对使用的,随着用户的操作或者是系统属性变化(屏幕亮暗变化),这两个方法可能被多次调用;从activity是否处于前台来说(是否获得焦点),onResume和onPause是配对使用的,随着用户操作或设备变化,这两个方法可能被多次调用。
<strong>2、Activity的异常生命周期分析</strong>