Activity生命周期与启动模式

一.典型情况下的生命周期

     所谓情况下的生命周期指在有用户参与的情况下,Activity所经过的生命周期改变。

     在正常情况下,Activity会经过如下的生命周期。

(1)onCreate:表示Activity正在被创建,这是生命周期的第一个方法。在这个方法中,我们可以做一些初始化工作。

  (2)onRestart:表示Activity正在重新启动。一般情况下,当当前Activity从不可见重新变为可见时,onRestart就会被调用。这种情况一般是用户行为导致的,比如用户按home 键切换到桌面,或者打开一个新的Activity,这时当前的Activity就会暂停,也就是也就是onpause和onStop被执行了,接着用户又回到了这个Acivity,就会出现这种博客。

     (3)onstart:表示Activity正在被启动,即将开始,这时Activity已经可见了,但是还没有出现在前台,还无法与用户进行交互。这个时候可以理解为Activity已经显示出来了,但是我们还看不到。

   (4)onresume:表示Activity已经可见了,并且出现在前台开始活动。要注意这个和onstart 的对比,onstart和onresume都表示activity已经可见,但onstart的时候Activity还在后台,onresume的时候才会显示到前台。

(5)onpause:表示activity 正在停止,正常情况下,紧接着onstop就会被调用。在这个特殊情况下,如果这时候快速的再回到当前的activity,那么onresume就会调用

(6)onstop:表示activity即将停止,这时候可以做一些稍微重量级的回收工作,但同样不能太耗时。

(7)ondestory:表示activity即将被销毁,在这里,我们可以做一些回收工作和最终的资源释放。

二.异常情况下的生命周期

系统配置变化导致Activity销毁重建
这种情况比较典型的就是竖屏突然转换为横屏,由于系统配置发生改变,Activity就会销毁并重新创建。也有可能是因为资源内存不足导致低优先级的activity被杀死。

activity按照优先级从高到低可以分为如下三种:

(1)前台activity——正在和用户交互的Activity,优先级最高

(2)可见但非前台activity——比如activity中弹出了一个对话框,导致activity可见但是位于后台无法和用户交互。

(3)后台activity——已经被暂停的activity,比如执行了onstop,优先级最低

生命周期如图:

Activity生命周期与启动模式

 

 (1)standard:标准模式,这也是系统的默认模式。每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在

(2)singletop:栈顶复用模式。在这种模式下,如果新activity已经位于任务栈的栈顶,那么此activity不会被重建,同时它的onnewintent方法会被回调,通过此方法的参数我们可以取出当前请求的信息。

(3)singletask:栈内复用模式。在这种情况下,只要activity在一个栈中存在,呢么多次启动此activity都不会有重新创建实例。

(4)singleinstance:这是一种singletask的增强模式