Activity启动模式

● standard 标准模式
​ 简述:对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。
例如:A启动A,A再接着启动A,A再接着启动A,,然后再分别出栈,如图所示:

image.png

● singleTop
简述:当活动的启动模式指定为 singleTop ,在启动活动时如果发现返回栈的栈顶已经
是该活动,则认为可以直接使用它,不会再创建新的活动实例。
例如:如果快速点击一个按钮,进入Activity,要保证启动的Activity不为多个,可以使用
将Activity的启动模式改为 singleTop,就不会启动多个了。如图所示:

image.png

● singleTask
简述:当活动的启动模式指定为singleTask,每次启动该活动时候,它会先在系统中查找属性值taskaffinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,他就会这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置了“singleTask”启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。

如果设置了“singleTask”启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。

每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。

image.png

当栈底部的 A 重新被启动打开时,会执行onNewIntent() onStart() 方法。

使用场景:应用主页面一般是 singleTask

● singleInstance(单独任务栈)
简述:使用singleInstance 模式就可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都会共用同一个返回栈,也就解决了共享活动实例的问题。

image.png

返回的页面顺序是:C-B-A

-------------本文结束感谢您的阅读-------------