Activity 四种启动模式:
Standard SingleTop SingleTask SingleInstance
1) Standard
默认的启动模式,不用我们手动为<activity>配置android:launchMode属性.只要开启都会创建一个新的Activity实例放在任务栈中,eg:我们创建了俩个Activity实例,我们需要按回退键两次才能回到最初的Activity.而且被开启的Activity的任务栈和开启他的Activity任务栈是同一个!
2)SingleTop
当使用这种启动模式的Activity在栈的时候,再次开启,就不会创建新的Activity.也就是说使用的都是同一个FirstActivity实例;如果按一下后退键,程序立即退出,说明当前栈结构中只有一个Activity实例。
如果是多个Activity怎么办?如果不是在栈顶会如何?eg:当从SecondActivity跳转到FirstActivity时,系统发现存在有FirstActivity实例,但不是位于栈顶,于是重新生成一个实例。这就是singleTop启动模式,如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例。
3)SingleTask
在同一个栈中只能有唯一的Activity实例,如果要跳转至已存在的singleTask模式的Activity,那么会清除这个Activity以上的所有Activity把他显示出来!eg:FirstActivity设置为SingleTask模式,SecondActivity跳转到FirstActivity 不会生成新的实例.但是从FirstActivity跳转到SecondActivity时生成了新的实例。SecondActivity跳转到FirstActivity后的栈结构发生变化,SecondActivity消失了,没错,在这个跳转过程中系统发现有存在的FirstActivity实例,于是不再生成新的实例,而是将FirstActivity之上的Activity实例统统出栈,将FirstActivity变为栈顶对象,显示到幕前。也许朋友们有疑问,如果将SecondActivity也设置为singleTask模式,那么SecondActivity实例是不是可以唯一呢?在我们这个示例中是不可能的,因为每次从SecondActivity跳转到FirstActivity时,SecondActivity实例都被迫出栈,下次等FirstActivity跳转到SecondActivity时,找不到存在的SecondActivity实例,于是必须生成新的实例。但是如果我们有ThirdActivity,让SecondActivity和ThirdActivity互相跳转,那么SecondActivity实例就可以保证唯一。
4)SingleInstance
它的启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。FirstActivity的launchMode="standard",SecondActivity的launchMode="singleInstance"从FirstActivity跳转到SecondActivity时,重新启用了一个新的栈结构,来放置SecondActivity实例,然后按下后退键,再次回到原始栈结构;