Android 五种启动模式

961 阅读2分钟

启动模式简介

在版本android12之前存在4种启动模式分别为:

  1. standard:默认启动模式,每次启动一个activity都会创建一个新的对象
  2. singleTop:栈顶复用启动模式,启动activity之前会在当前任务栈的栈顶进行判断,若目标activity在栈顶,则复用当前activity
  3. singleTask:栈内复用启动模式,启动时会进行判断,当前栈内是否有当前activity实例,若存在则直接复用此activity,并清空栈内当前activity上方的activity。
  4. singleInstance:单独栈模式,一个手机中设置了此属性的相同activity永远会单独占用一个任务栈,此任务栈中不会有其他的activity。

android 12开始后google新增了一种新的启动模式singleInstancePerTask:此模式下activity启动会判断当前任务栈最底部有没有自己的实例,若存在则会清空当前任务栈其上方的activity,若不存在,则会创建一个新的任务栈进行activity的启动,除此外,其它行为与singtask类似。

不同启动模式时,任务栈与生命周期的变化

standard模式

任务栈中acitivity的变化

image.png

任务栈task1中通过activity2-1启动activity2会生成一个activity2-2实例,生命周期执行逻辑为

image.png

singleTop模式

当前activity不在栈顶时栈中的变化以及生命周期的变化与standard一样。 当启动的activity在栈顶时,任务栈中activity的变化为

image.png

生命周期的变化为

image.png

singleTask模式

当前activity在目标任务栈中没有时变化与standard模式一样。 当前activity在目标任务栈中位于顶部时变化与singleTop模式一样。 当启动activity在目标任务栈中间位置时栈的变化:

image.png

生命周期变化

image.png

singleInstance

启动activity时的栈变化

image.png

生命周期变化:

当activity不存在时,生命周期变化与standard模式一样, 当activity存在时,生命周期变化与singleTask模式一样。

singleInstancePerTask(只在android12以上才有效果,以版本的逻辑为standard模式效果)

当目标栈的底部为当前activity则其栈与生命周期的变化与singleTask模式一样。

当目标栈不存在此acitivty时其栈与生命周期的变化与singleInstance模式一样。