启动模式简介
在版本android12之前存在4种启动模式分别为:
- standard:默认启动模式,每次启动一个activity都会创建一个新的对象
- singleTop:栈顶复用启动模式,启动activity之前会在当前任务栈的栈顶进行判断,若目标activity在栈顶,则复用当前activity
- singleTask:栈内复用启动模式,启动时会进行判断,当前栈内是否有当前activity实例,若存在则直接复用此activity,并清空栈内当前activity上方的activity。
- singleInstance:单独栈模式,一个手机中设置了此属性的相同activity永远会单独占用一个任务栈,此任务栈中不会有其他的activity。
android 12开始后google新增了一种新的启动模式singleInstancePerTask:此模式下activity启动会判断当前任务栈最底部有没有自己的实例,若存在则会清空当前任务栈其上方的activity,若不存在,则会创建一个新的任务栈进行activity的启动,除此外,其它行为与singtask类似。
不同启动模式时,任务栈与生命周期的变化
standard模式
任务栈中acitivity的变化
任务栈task1中通过activity2-1启动activity2会生成一个activity2-2实例,生命周期执行逻辑为
singleTop模式
当前activity不在栈顶时栈中的变化以及生命周期的变化与standard一样。 当启动的activity在栈顶时,任务栈中activity的变化为
生命周期的变化为
singleTask模式
当前activity在目标任务栈中没有时变化与standard模式一样。 当前activity在目标任务栈中位于顶部时变化与singleTop模式一样。 当启动activity在目标任务栈中间位置时栈的变化:
生命周期变化
singleInstance
启动activity时的栈变化
生命周期变化:
当activity不存在时,生命周期变化与standard模式一样, 当activity存在时,生命周期变化与singleTask模式一样。
singleInstancePerTask(只在android12以上才有效果,以版本的逻辑为standard模式效果)
当目标栈的底部为当前activity则其栈与生命周期的变化与singleTask模式一样。
当目标栈不存在此acitivty时其栈与生命周期的变化与singleInstance模式一样。