Android开发中我们打交道最多的Activity,这里说下对Activity4种启动模式的简单总结
Standard:
这是Activity启动的默认模式,启动一个activity便是建一个新的activity对象,往task里塞。
SingleTop:
在该启动模式下,当启动一个activity时,比如启动ActivityA,如果task中已经存在ActivityA实例且在栈顶,则直接使用该实例而不是新建一个实例,其他情况更Standard模式相同
SingleTask:
该模式的意思是在同一个task中只存在一个实例,比如启动ActivityA,如果task中已经存在ActivityA实例,则直接使用该实例而不是新建一个实例,如果此时该实例不是在栈顶,则会清空在该实例以上的activity
SingleInstance:
该模式是强化的SingleTask模式,意思是在任何时候都只能有一个Activity实例。
此外,还有其他几个可以干扰到activity启动方式的flag,如果xml里注册的activity已经填写了启动模式,而代码里又为启动activity添加了flag时,如果存在冲突,则flag会覆盖xml里的启动模式的部分功能,但并不是完全互斥
FLAG_ACTIVITY_NEW_TASK:
该flag的作用跟SingleTask十分相似,也是同一个task中只会存在一个activity实例,可以在xml里填写taskAffinity属性指定activity需要的task,但与SingleTask不同的一点在于:单用此flag,如果此时该实例不是在栈顶,也不会清空在该实例以上的activity(配合FLAG_ACTIVITY_CLEAR_TOP可以,但跟SingleTask仍存在不同之处)
FLAG_ACTIVITY_CLEAR_TOP:
使用该flag启动activity,如果task中存在activityA实例,则会直接使用该activityA实例,并清空task中在该实例以上的activity(如果该activity在xml里使用的模式是Standard,则会清空包括该activityA实例在内以上的activity,然后使用新的activityA实例)
FLAG_ACTIVITY_SINGLE_TOP:
该flag作用同SignleTop模式