Activity的四种启动模式
一、启动模式介绍
启动模式其实就是Activity启动时的策略,在AndroidManifest.xml中的标签的Android:launchMode属性来设置;
启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;
任务栈:用于只存放一组应用activity的集合,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序。
1.standard
其中standard属于默认,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。就好比我有3个页面 A1 A2 A3 我想从A1跳到A2从A2跳到A3 再从A3跳回A1在默认布局下 你想返回主界面需要返回4次 为啥拿 因为 你的每次点击系统都会配置一次Activity 退出时以栈的形式退出
2 .singleTop模式
(1) singleTop启动模式与standard类似,不同的是,当启动的Activity已经位于栈顶,则直接使用它,不再创建新的实例。
(2)解决一个用户体验的问题,避免已经打开的页面被重复打开多次。
若我有两个Activity名为A1,A2,两个Activity内容功能完全相同,都有两个按钮可以跳到A1或者A2,唯一不同的是A1为standard,A2为singleTop。
当打开的顺序为A1->A2->A2,则实际打开的顺序为B1->B2(后一次意图打开B2,实际只调用了前一个的onNewIntent方法)
当打开的顺序为A1->A2->A1->A2,则实际打开的顺序与意图的一致,为B1->B2->B1->B2。
3.singleTask模式
当Activity的启动模式为singleTask时,每当启动该Activity时,系统首先使用实例,并将当前Activity之上的所有Activity之上的所有Activity出栈,如果没有发现则创建一个新的实例。
例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。
4.singleInstance