activity的启动模式详解

在默认情况下,当我们启动activity的时候,系统会创建一个实例并放入任务战中,任务栈是一种后进先出的结构。

目前有四种启动模式:standard,singleTop,singleTask,singleInstance

(1)standard:标准模式,如果不特殊申明,这也是系统的默认模式。每次启动一个activity都会重新创建一个新的实例,不管这个实例是否在任务栈中存在。在这种模式下,谁启动了这个activity,那么这个activity就在谁的栈中。比如activity A启动了activity B(标准模式),那么B就会进入A所在的任务栈中。

特别注意:当我们使用applicationContext去启动standard模式的activity的时候会报错,这是因为standard模式的activity默认会进入启动它的activity所属的任务栈中,但是由于非activity类型的context并没有任务栈,所以报错。解决的方法为为待启动的activity添加一个标记位。

(2)singleTop:栈顶复用模式。如果待启动的新的activity已经位于任务栈的栈顶,那么activity不会被重新创建,同时它的onNewIntent方法会被回调。这个activity的onCreate和onStart不会被系统调用。如果新的activity在任务栈中但不是栈顶,那么还是会被重新创建一个。

(3)singleTask:栈内复用模式。如果待启动的activity存在于任何一个栈中,那么都不会重新创建实例,如果不存在,则创建一个新的栈,并将待启动的activity放入栈中。

(4)singleInstance:单实例模式。这种模式的activity只能单独的位于一个任务栈中。如果启动时任务栈中没有这个activity,则创建一个新的任务栈并放入。如果有,则类似于栈内复用。

你可能感兴趣的:(activity的启动模式详解)