Activity启动模式

Activity的启动和退出就像一个栈一样遵守先进后出的原则, 这就是返回栈. Android默认关联启动的所有Activity都在一个返回栈中, 除非修改启动模式.

在清单文件中可以设置启动模式

1
<activity android:name=".Main2Activity" android:launchMode="singleTop"/>

Activity的启动模式有四种

standard

标准模式, 即为默认. 开启几个Activity就有几个实例对象存在

singleTop

单一顶部模式, 如果需要启动的Activity已经在栈顶则会复用该实例

这个C不会被再次创建实例对象

singleTask

在一个返回栈中的Activity只能有一个实例对象, 启动该Activity会销毁它上面所有的Activity

这个时候B和C都会被销毁

singleInstance

为启动的Activity开一个新的单一返回栈. 单一返回栈只会有一个Activity实例

假设开启Activity顺序: A - B - C

  • 在该模式下的Activity开启新的Activity又会回到原本的返回栈中

  • B处于被开启后的状态无论谁再来开启这个Activity都会直接跳转到B

三者的返回顺序遵照先把自身所处的返回栈清空再跳转到其他栈

需要注意的是B最小化后无法再回到B. 需要再次开启B才行. 所以他的运用场景一般和应用分离, 默认Activity过渡动画也和一般有所区别.

taskAffinity属性

android:taskAffinity 属性是指定Activity所在的返回栈名称, 默认是应用id名(也就是主栈).该属性必须和singleTask模式一起使用, 否则无效.

如果多个Activity的属性android:taskAffinity的值相同则会在同一个返回栈中. 值不同则在不同的返回栈中.

1
2
3
4
<activity
android:name=".Main2Activity"
android:taskAffinity="com.google.task2"
android:launchMode="singleTask"/>

allowTaskReparenting属性

android:allowTaskReparentng属性决定Activity是否支持返回栈迁移, 默认为”false”

如图所示

清空返回栈

android:clearTaskOnLaunch属性设置为true支持清空返回栈, 但是只对返回栈最底层的Activity生效.

例如给A activity设置该属性为true

每次回到桌面再次进入都会又回到Activity A, 而B和C都会被销毁.

参考文章

Activity启动模式与任务栈(Task)全面深入记录(上)

Activity启动模式与任务栈(Task)全面深入记录(下)