Android中四种启动模式,最容易理解的小白教程

534 阅读4分钟

说起Android中的启动模式,其实是个很基础的内容,谁都知道是4中启动模式,没错分别是以下四种:

1,standard

2,singleTop

3,singleTask

4,singleInstance

关于高深的纯理论说明这里就不多做赘述,毕竟文字说明太饶人,这里就准备说点简单的,能看得见的,现在开始吧。

第一种:standard(默认)

关于这种模式,大家都知道,就是Android默认的启动模式,就是不显示指定,就是这种模式。现在有FirstActivity和SecondActivity两个界面,代码里都打印了当前实例和taskId,格式为xx/xx

测试情景:重复跳转自己(自己设置standard)

794为task的Id,前面的为当前实例对象,可见每次都是新建的,并不是复用的。@f37d177是第一个页面,一共跳转了三次。同样退出应用也用了三次。

结论:standard模式下,会不断地新建activity实例,都放入同一个task中

第二种:singleTop

测试情景一:重复跳转自己(自己设置singleTop)

看起来好像没有点击一样,其实是点击了的,注意看Actionbar上的点击计数,点击了3次,三次的实例和taskId都是没有变化的,且最后退出应用就用了一次点击,如下图:

测试情景二:循环跳转到目标页面(SecondActivity设置singleTop)

可以看到两次跳转到SecondActivity时,实例都不一样,且最后返回到桌面也是和进入的次数一样多。这里进入了两次SecondActivity,且最终从SecondActivity退出应用,一共用了4次,如下图

结论:顾名思义,singleTop,如果当前实例在当前的task的栈顶,则直接复用,测试情景一;如果当前实例不再栈顶,则新建实例,如测试情景二,因为每次都是从FirstActivity跳转到SecondActivity的,虽然第二次跳转到SecondActivity的时候已经存在了SecondActivity实例,可是因为不在栈顶,所以又新建了一个SecondActivity实例。

第三种:singleTask

测试情景一:重复跳转自己(自己设置singleTask)

跳转了自己4次,可以看到实例和taskId都是没有变化,且最后一次就能退出应用,如下图:

测试情景二:循环跳转到目标页面(SecondActivity设置singleTask)

这里我们注意到一开始FirstActivity的实例为a2c5349,然后跳转到SecondActivity一直都是5d5dd2a,而且taskId两个界面也是一致的,最后在SecondActivity按了一次返回键,这里直接返回到了最初的5349实例界面,也就是第一个界面,如下图:

结论:设置了singleTask的页面,只要是task中有这个实例,就会一直复用,而且每次复用这个已存在的实例,都会清空上面的其他实例(这里的FirstActivity),将自己直接提升到栈顶位置,也就是显示自己

第四种:singleInstance

测试情景一:重复跳转自己(自己设置singleInstance)

跳转了5次,但是可以发现实例和task的值都没有变化,退出应用也只是一次退出,如下图:

测试情景二:循环跳转到目标页面(SecondActivity设置singleInstance)

可以看到一开始从FirstActivity跳转跳转到SecondActivity的时候,taskId发生了变化,FirstActivity的id是863,但是跳转到SecondActivity的时候变成了864,然后后面每次跳转到SecondActivity的时候实例和task的id都是没有变化;说说返回的场景

如果最后从FirstActivity返回,那么会把之前压入栈的FirstActivity全部返回完之后才是SecondActivity页面,然后一次就能退出应用;

如果最后从SecondActivity页面返回,那么一次就回到FirstActivity,然后把之前压入栈的FirstActivity全部返回完就退出了应用;

压入栈的如下图所示:

结论:设置了singleInstance的页面,初始时都是新建一个task栈给这个页面,然后后面一直复用这个栈内的页面。注意,只有这种模式会新建一个栈给初始化的页面。最后返回的规律是,先把本页面所在的栈头出完,然后再出下一个栈的每个页面。

至此,四种模式简单分析完毕,希望能给大家一个直观的理解

上一篇:IDEA或者AS 中关于Git的常用操作