Activity 的启动模式有4种,分别是standardsingleTopsingleTasksingleInstance
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activity 的启动模式有4种,分别是standardsingleTopsingleTasksingleInstance相关的知识,希望对你有一定的参考价值。
关于安卓部分知识
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种,分别是standardsingleTopsingleTasksingleInstance的主要内容,如果未能解决你的问题,请参考以下文章