首页 > 代码库 > Activity 的启动模式有4种,分别是standard、singleTop、singleTask、singleInstance

Activity 的启动模式有4种,分别是standard、singleTop、singleTask、singleInstance

关于安卓部分知识

Activity 的启动模式有4种,分别是standard、singleTop、singleTask、singleInstance

1.standar (标准启动模式)

这是Activity 的标准启动模式,也是 Activity 的默认启动模式。在这种模式下启动的Activity 可以被多次实例化,即在同一个任务栈种可以存在多个Activity实例,每个实例都会处理一个Intent 对象。如果ActivityA 的启动模式为standard,并且已经有一个ActivityA 被启动,在该 ActivityA中调用startActivity时会启动一个新的ActivityA 实例。栈的变化如下图:

技术分享

 

 

如果ActivityA 是一个非常耗资源的类,那么将会使它所依附的应用消耗更多的系统资源。

2.singleTop

如果一个一singleTop 模式启动的Activity 的实例已经存在于任务栈的栈顶,那么再启动这个Activity时,不会创建新的实例,而是重用位于栈顶的那个实例,并且会调用该实例的onNewIntent()函数将Intent对象传递到这个实例中。例如 ActvityA 的启动模式是singleTop,并且ActivityA的一个实例已经在于栈顶中,那么再调用startActivity 启动另一个ActivityA时,不会再次创建ActivityA实例,而是重用原来的实例的onNewIntent()函数,此时任务栈中还是一个ActivtyA 实例。如下图

 技术分享

 

如果singleTop模式启动的 Activity 的一个实例存在于任务栈中,但是不在栈顶,那么它的行为和standard模式相同也会创建一个新的实例,栈内变化如下图

 技术分享

 

3 singleTask

singleTask 模式是指常用的启动模式,如果一个 Activity 设置了该启动模式,那么在一个任务栈中只能有一个该Activity的实例。如果任务栈还没有该Activity,会创建一个实例放在栈顶。但是,如果存在Activity,系统会销毁该的Activity上的所有Activity,最终让该Activity实例处于栈顶。最终让该Activity 处于栈顶,同时回调该Activity的onNewintent()函数,栈内变化如下图

 技术分享

 

4.singleInstance

设置了 singleInstance 模式的Activity 会在一个独立的任务中开启,并且这个新的任务中有且只有一个实例,也就是说该实例启动的其他Activity 会自动运行于另一个任务中。当再次启动该Activity 实例时,会重用已存在的任务和实例。并且会调用该实例的onNewIntent() 函数,将Intent实例传递到该实例中。

和 singleTask不同的是,同一时刻在系统中只会存在一个这样的Activity实例,而singleTask模式的Activity是可以有多个实例,只要这些Activity在不同的任务栈中即可,例如,应用吧A启动了一个启动模式为 singleTask 的ActivityA,应用B 又通过Intent 想要启动一个ActivityA,此时由于应用A和应用B都有自己的任务栈,因此,在这两个任务栈中分别有一个ActivityA实例。而singleInstance 能保证Activity在系统中只有一个实例,不管多少应用要启动该Activity,这个Activity有且只有一个如下图

 

 技术分享

 

Activity 的启动模式有4种,分别是standard、singleTop、singleTask、singleInstance