Activity 的启动模式

来源:互联网 发布:淘宝可以改好评吗 编辑:程序博客网 时间:2024/06/05 21:56

在android里,有4种activity的启动模式,分别为:“standard” (默认)、“singleTop”、“singleTask”、“singleInstance”

区别:

1、 是否允许多个实例

“standard”和”singleTop”可以被实例化多次,且可以存在不同的task中,且一个task可以包括一个activity的多个实例;

“singleTask”和”singleInstance”限制只生成一个实例,并且是task的根元素。

singleTop要求如果创建intent的时候栈顶已经有要创建 的Activity的实例,则将intent发送给该实例,而不发送给新的实例。

 

2、. 是否允许其它activity存在于本task内

“singleInstance”独占一个task,其它activity不能存在那个task里;如果它启动了一个新的activity,不管新的activity的launch mode 如何,新的activity都将会到别的task里运行(如同加了FLAG_ACTIVITY_NEW_TASK参数)。

而另外三种模式,则可以和其它activity共存。

 

3. 是否每次都生成新实例

“standard”: 每次启动Intent都会生成一个activity的新实例;

“singleTop”  如果activity的实例在task的栈顶,则不生成新的该activity的实例,直接使用栈顶的实例,否则,生成该activity的实例。

比如现在task栈元素为A-B-C-D(D在栈顶),这时候给D发一个启动intent,如果D是 “standard”的,则生成D的一个新实例,栈变为A-B-C-D-D。如果D是singleTop的话,则不会生产D的新实例,栈状态仍为A-B-C-D;如果给B发Intent的话,不管B的launchmode是”standard” 还是 “singleTop” ,都会生成B的新实例,栈状态变为A-B-C-D-B。

 总结:

standard  每次都会新建,每个Task都可以有,且每个Task可以有多个实例(每个Task都可以有,且可以有多个) 
singleTop 如果当前实例在栈顶,就不新建实例。 如不在栈顶,则新建实例 (每个Task都可以有,且可以有多个,在栈顶时可复用)
singleTask 新建一个Task,如果已经有其他的Task并且包含该实例,那就直接调用那个Task的实例。(只有一个Task中会有)
singleInstance 新建一个Task,且在该Task中只有它的唯一一个实例。 (只有一个Task会有,且该Task中只有它)

0 0
原创粉丝点击