任务栈
每次开启一个新的活动,就会在任务栈中新开辟一块空间,这个新活动就<activity android:name=".MainActivity"
android:launchMode="singleTask">会被放入这个任务栈,当一个活动被销毁的时候,这个活动就会被从任务栈中被清除。
如下图,依次开启1,2,3,4,这四个活动那个时,这四个活动就会被放入任务栈。
Activity启动模式
通过在配置文件中为activity设置launchMode属性,来设置启动模式,如果不设定启动模式,那么默认就为standard模式
<activity android:name=".MainActivity"
android:launchMode="">
standard
<activity android:name=".MainActivity"
android:launchMode="standard">
这种启动模式为标准启动模式,即每开启一个新的活动,该活动就会被放入任务栈的栈顶。
例如从MainActivity中又进入MainActivity,又进入MainActivity,这样就会在任务栈中放入三个MainActivity,要退出三次才会退出这个活动。
总结来说,就是standard模式没有任何限制,只要开启一个活动,就会把该活动放入任务栈。
singleTop
<activity android:name=".MainActivity"
android:launchMode="singleTop">
这种启动模式保证在任务栈的栈顶的activity不可能重复。
例如从activity1开启了一个activity2,这时任务栈中就有activity1和activity2两个活动,而且activity2位于栈顶,这时如果再开启activity这个活动,activity2就不会被放入任务栈,而是继续用栈顶的activity2.后退一次就会进入activity1,再后退一次就会退出程序。
singleTask
<activity android:name=".MainActivity"
android:launchMode="singleTask">
这种启动模式保证任务栈中的每个活动只有一个,不会重复。
例如从activity1开启了一个activity2,又从activity2开启了activity3,这时任务栈中就有activity1和activity2,activity3 三个活动,如果此时从activity3开启activity1这个活动,那么activity1上面的活动都会被从任务栈中清除,然后使用当前任务栈中的activity1这个活动,此时只要后退一次,就会退出程序。
singleInstance
<activity android:name=".MainActivity"
android:launchMode="singleInstance">
如果一个活动被设置为singleInstance启动模式,那么和上面的三种就有很大的不同。
此时当开启这个活动时,会为这个活动新开辟一个任务栈,即其他的活动位于一个任务栈中,这个活动位于一个单独的任务栈中。
例如activity1,2,3,4是标准的启动模式,acticity5是singleInstance启动模式。
现在分别开启了activity1,2这两个活动,这两个活动就会进入左边的任务栈,这时开启activity5这个活动,程序就会为activity5新开辟一块任务栈。
然后开启activity3,继续放入左边的任务栈中。再开启activity5,就会复用右边的任务栈,不再新开辟空间,再开启activity4,继续放入左边的任务栈中。
当程序退出时:
如果当前界面位于activity5,就会先清空activity5这个任务栈,再依次清空左边的任务栈,所以退出的顺序是,activity5,4,3,2,1
如果当前界面在左边的activity中,那么就会先清空左边的任务栈,再清空activity5的任务栈,所以推出的顺序是activity4,3,2,1,5.