android 的四种启动模式

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

        只有一个实例,并且这个实例独立运行在一个栈中,这个栈只有这个实例,不允许有别的Activity存在。就比如在一个应用系统中D1为singleInstance类型实例 当我想要调用D1的时候比如从D2>D1  这种时候D2一个栈D1一个栈这时若我在想D1>D3则D2 D3
一个栈D1一个栈。这就涉及2个栈,假如其他应用系统想要调用D1,比如C1>D1>D2 这种时候C1一个栈D1 一个栈D2一个栈。
     通俗来讲该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中它都会处于任务栈的栈顶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值