Activity是android的四大组件之一,其重要性不言而喻,下面我们就简单的介绍一下它的活动状态和生命周期:
一、Activity的形态
Active/Running:
该Activity处于活动状态,位于Activity的栈顶,是可见状态,可以与用户进行交互;
paused:
当Activity失去焦点时,或者新的Activity处于栈顶顶替了该Activity,或者被一个透明的Activity放置在了栈顶时,该Activity就会处于Pause的状态。但要明白的时,此时的Activity只是失去了与用户交互的能力,并没有失去保留在Activity的数据和所有的状态信息。但当系统内存紧张时,也有可能被系统强制回收;
Stopped:
当一个Activity被另外的Activity完全覆盖时,被覆盖的Activity就会进入Stopped状态,此时的它在屏幕不可见,更不可能与用户进行交互,但与Pasued状态相同,成员变量以及其状态信息依旧保留;
Killed:
当Activity被系统回收时,就会进入该状态,所有信息都会被回收;
当我们实际应用中,Activity都将会在上述四个形态中来回跳转,具体应用还要因时而异;
二、Activity的生命周期
下面我们就来讲讲Activity的生命周期:
onCreate:
在Activity被创建的时回调该方法,它是Activity的第一个方法,一般的初始化工作都在这里进行;
OnStart:
Activity正在启动时回调该方法,此时的Activity处于可见状态,只是还没显示出来,无法与用户交互;
OnResume:
回调此方法时,Activity已经可见,能与用户发生交互;
OnPause:
此方法回调时Activity将处于停止状态(Paused形态),一般情况下下一步将会进行回调OnStop的生命周期,但也有例外;
OnStop:
表示Activity已经被覆盖,进入了Stopped形态,此时的Activity不可见,在后台运行;
OnRestart:
表示Activity正在重新启动,一般是OnStop生命周期之后,随后还会执行OnStart、OnResume生命周期,使Activity再次由不可见变为可见;
OnDestroy:
此时的Activity被销毁,系统进行回收,是生命周期的最后一个方法。一般在该方法中做一些回收和释放资源的工作;
以上就是Activity的正常生命周期的执行,但除此之外还有异常情况下的生命周期执行顺序
比如:
当前Activity处于Active形态时,用户进行了横竖屏的切换,此时的Activity会执行Paused,Stopped,Killed,Active的形态。因为Activity默认回调了OnSaveInstanceState()和OnRetoreInstanceState()方法。
OnSaveInstanceState()方法会在OnStop()之前执行,与OnPaused()没有顺序关系,可能在它之前也可能是之后。该方法会在Activity发生异常情况时调用,用于储存当前页面的所有数据以及状态。
OnRetoreInstanceState()该方法会在Activity发生异常重新启动时在OnCreate()之前执行,用于取出在 OnSaveInstanceState()储存的数据,并在下一步初始化页面时将数据及状态进行相应;