Android中的任务栈模式介绍和切换

任务栈

  • 任务栈:一个用来放Activity实例的容器。
  • 特点:“先进后出”
  • 操作:压栈和出栈。

压栈

任务栈
Activity1
任务栈
启动Activity2
Activity1
任务栈
Activity2
Activity1
任务栈
启动Activity3
Activity2
Activity1
任务栈
Activity3
Activity2
Activity1

出栈

任务栈
Activity3
Activity2
Activity1
任务栈
销毁Activity3
Activity2
Activity1

Activity启动模式

standard模式 (默认使用)

  • standard模式是Activity的默认启动方式,每个启动一个Activity就会在栈顶创建一个新的实例。
任务栈
Activity1
任务栈
启动Activity2
Activity1
任务栈
启动Activity3
Activity2
Activity1
任务栈
Activity3
Activity2
Activity1

singleTop模式

  • singleTop模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶则直接复制,否则创建新的实例。
任务栈
Activity3
Activity2
Activity1
任务栈
启动Activity3Activity3
Activity3位于栈顶,直接复用,不需要新建新的ActivityActivity2
Activity1
任务栈
启动Activity2Activity3
Activity2不在栈顶,需要新建新的ActivityActivity2
Activity1
任务栈
Activity2
Activity3
Activity2
Activity1

singleTask模式

  • singleTask模式下每次启动该Activity时,系统首先会检查栈中是否存在当前的Activity实例,如果存在则直接使用,并把当前Activity之上的所有实例全部出栈。
任务栈
Activity4
Activity3
Activity2
Activity1
任务栈
启动Activity2Activity4
任务栈中有Activity2,则直接使用,并将Activity2之上的所有Activity移除。Activity3
Activity2
Activity1
任务栈
Activity2
Activity1

singleInstance模式

  • singleInstance模式会启动一个新的任务栈管理Activity实例。无论从哪个任务栈中启动该Activity,该实例在整个系统中只有一个。
任务栈A任务栈B
启动Activity3
创建新任务栈B用于管理Activity3
Activity2
Activity1Activity3

设置Activity启动模式

在清单文件(AndroidManifest.xml)找到你要设置的Activity添加上android:launchMode就可以切换启动模式。

<activity
    android:name=".MainActivity"
    android:launchMode="singleTop"></activity>
ins: cosplay_zettairyoiki