1. Activity任务栈
Activity任务栈是Android对Activity界面的一种管理方式。任务栈,顾名思义就是“后进先出”,也就是说,当从一个Activity中启动一个新的Activity界面时,新界面将位于Activity栈的栈顶;当用户按下返回键时,系统将弹出栈顶的Activity并将上一个Activity置为栈顶,此时应用界面也就回到该Activity界面了,如果应用只包含一个Activity或者当前任务栈只存在一个Activity时,按下返回键,系统将退出应用。
2. 启动模式
Activity的启动模式表示Activity在任务栈中的切换或启动方式,该模式应该在AndroidManifest.xml文件下配置。下面列出了Activity启动模式的完整配置代码:
<activity
android:name="come.example.ExampleActivity"
android:label="@string/activity_example"
android:launchMode="standard">
</activity>
其中android:launchMode就表示启动模式,可用启动模式包含standard、singleTop、singleTask、singleInstance四种,如果没有显示声明启动模式,则默认为standard模式。
2.1 standard模式
standard模式是所有Activity的默认启动模式。该模式对Activity的启动和切换没有任何限制,任何时候我们通过startActivity()或startActivityForResult()启动一个standard模式的Activity时,系统都将创建一个该Activity的实例并放置到栈顶。
2.2 singleTop模式
当一个Activity被设置singleTop模式时,那么在Activity任务栈的栈顶将不能同时存在该Activity的两个实例。但是在整个任务栈中,可以交错存在该Activity的多个实例。该模式可以防止同一个Activity重复创建(启动)多次。
2.3 singleTask模式
如果一个Activity被设置为singleTask模式时,那么在整个任务栈中只能存在该Activity的一个实例。当重复启动该Activity时,系统将会销毁(已经存在的)该Activity实例之前的所有其他Activity,并将该Activity移至栈顶。
2.4 singleInstance模式
所有singleInstance模式的Activity都将独立存在一个任务栈中,并且也不能重复创建或启动。当应用首次启动一个singleInstance模式的Activity时,系统将为应用创建一个新的前台任务栈,并将该Activity置于栈内,而且应用的界面永远都是显示前台任务栈。此后任何时候启动其他非singleInstance模式的Activity时,系统将会创建另一个前台任务栈,然后将所有其他非singleInstance模式的Activity按照启动顺序置于该前台任务栈中,最后将singleInstance模式的Activity所在的任务栈移至后台。此后启动任何Activity都只是前后台任务栈的切换,区别是,重复启动同一个singleInstance模式的Actvity时,系统仅仅是将该Actvity所在的任务栈切换至前台,而启动其他类型的Activity时,系统不但需要切换任务栈,而且需要为该任务栈添加新的Activity实例。