Activity的四种启动模式

活动是有四中启动模式的。这四种分别是standard模式、singleTop模式、singlTask模式以及singleInstance模式。其中standard模式是活动的默认启动模式。

活动的启动模式是在AndroidManifest.xml中设置的,activity标签中,加入android:launchMode="模式名称"代码即可。

standard模式:

我们知道Android是通过返回栈(back stack)来管理活动的,栈是一种先进后出的数据结构。默认情况下(standard模式)每当我们启动一个活动activity1,就会创建一个activity1的实例进入返回栈,处于返回栈的顶部。(用户看到的activity位于栈的顶部才能被看到)。然后当activity1销毁的时候,位于栈顶的activity1就会出栈。下面重点来了:当我们启动activity1的时候,它入栈了,处于栈顶,我们也看到了activity1.然后我在activity1的中执行 Intent intent=new Intent(activity1.this,activity1.class); startactivity(intent);   这段代码相信大家都能看懂,就是我在activity1处于栈顶的情况下,又启动了activity1。这样在standard模式下返回栈有什么变化呢?这种情况下又会创建一个activity1的实例进入栈顶。栈顶是activity1栈顶往下一个还是activity1.当你按返回键时需要按两次才能退出程序。


如果不是很明白,你可以想象一下,把活动当做扑克牌,想启动活动,就是使用扑克牌,扑克牌只有在顶部才能被使用。 返回栈 是装扑克牌的盒子,刚开始盒子是空的,因为你没有放牌进去。当你放一张红桃三进去之后,盒子顶部的牌就是红桃三。standard模式下就是盒子最上面的是红桃三(活动),当你想启动红桃三(时)就往扑克牌上放一张红桃三,启动红桃三,就往上面放一张红桃三,不管你放之前这一摞扑克牌的最上面一张牌是不是红桃三。。当你按返回键销毁红桃三时,就从那一摞牌的最上面拿走一张。。standard模式的缺点就是,会重复创建Activity实例。


扑克牌的模型在你脑海里建立以后,下面的几模式,就好理解了。

singleTop模式

就是盒子顶部是红桃三时,你想放一张红桃三上去,不能放,因为顶部是红桃三了,你可以直接使用顶部的红桃三,但是当顶部不是红桃三,是红桃四时,你就可以放红桃三了。那么如果顶部不是红桃三,顶部的下面出现了红桃三,那可以把红桃三放在顶部么?答案是可以的。

singleTask模式

只要盒子里面有红桃三,你就不能把红桃三放在顶部。此时使用红桃三的话,就把盒子里面的红桃三移动到最顶端就行了,怎么移呢?很暴力,把压在红桃三上面的牌全部挤出去,自己在顶端。

singleInstance模式

这种模式是我门程序和其他程序共享一个Activity时应用的。被设置为singleInstance模式的牌不会放入前面三种存牌的牌盒,它会放入一个新牌盒,这个新牌盒专门管理被设置为singleInstance模式的牌。



新人写博,如有错误请指正谅解

你可能感兴趣的:(Activity的四种启动模式)