活动Activity的四种启动模式初解
活动Activity的四种启动模式
- standard
- singleTop
- singleTask
- singleInstance
注:Activity的四种启动模式只需在AndroidManifest.xml中通过 < activity > 标签中指定android:launchMode属性中来选择启动模式
例如:
<activity
android:name="xxx"
android:launchMode="singleTop">
<intent-filter>
.........
</intent-filter>
</activity>
1.standard/不进行显式指定下默认的启动模式
现 象;在最初学习的时候,我们会发现当我们利用 Intent 跳转页面的时候,A 跳到了A1 ,A1 又跳到了 A2,但在我们返回点击 BACK 按钮的时候,要一个一个按才会退出程序,这就是standard模式的特点。
解 释: 作为最基础的启动模式standard,每启动一个新的活动,就会在返回栈中入一次栈,处于栈顶的位置。 而stanard模式不会在乎该活动是否存在于栈顶,每次启动都会 重新创建 一个该活动的实例,所以在退出时,会一个一个的点击back才可以退出程序。
2.singleTop/条件性选择栈顶
看完standard觉得不太好,活动在栈顶,再次使用的时候还需要重新建立。
singleTop 很好的解决了这个问题,现象很简单,就是启动活动的时候,它会去搜一下栈顶,看一看有没有前世的小伙伴,有的话就合体进化爽歪歪,没有的话就自己出马了,重新创建一个实例。
<activity
android:name="xxx"
android:launchMode="singleTop">
<intent-filter>
.........
</intent-filter>
</activity>
3.singleTask/栈中寻找,是你的就是你的
在使用 singleTop 的时候,会遇到这样的情况: 当A->B ; B->A(指的跳转,非back返回)时,会发现 A 到 B时候 , B 存在于栈顶;到第二步 B 到 A 的时候,还需要重新创建实例,因为此时的栈顶是 B,所以无法使用 singleTop 。
那么singleTask 来了!
当该活动没有处在栈顶的位置,也是可以解决的~~
当指定启动模式为singleTask时,每次启动该活动的时候会首先瞅一瞅所有返回栈里面有没有那个 对的人 !如果有的话拉起来就跑,没有的话咱就好好待着,难道还怕没人要484.(ˇ^ˇ〉!
<activity
android:name="xxx"
android:launchMode="singleTask">
<intent-filter>
.........
</intent-filter>
</activity>
4.singleInstance/自己家矿不多了,挖别人的好了
预设场景:有一个活动太好用了,我们都想用怎么办嘞???共享喽。
但当我们同一个活动在不同返回栈中入栈的话必然要创建新的实例,怎么办呢?
找singleInstance模式,会有一个单独的返回栈来管理这个活动,无论谁来,都会在出行的单独返回栈中坐一坐。
<activity
android:name="xxx"
android:launchMode="singleTask">
<intent-filter>
.........
</intent-filter>
</activity>
假如同样的 A->B, B->C中, B 存在于单独的栈中,此时如果显示的是C页面,back键返回的时候,会从 C 到 A 最后到 B,因为A和C是存在于一个返回栈中的,所以点击back键出栈的时候,先回到的是 A 页面,栈1 空了到 栈2,最后栈全空退出程序。
emmmm…
说些啥嘞emmmmm… …
对了,这些模式没有好坏之分,不同的使用方法最后的展示效果也是不一样的,主要看使用喽~~