活动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 跳到了A1A1 又跳到了 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返回)时,会发现 AB时候 , B 存在于栈顶;到第二步 BA 的时候,还需要重新创建实例,因为此时的栈顶是 B,所以无法使用 singleTop
活动Activity的四种启动模式初解
那么singleTask 来了!
当该活动没有处在栈顶的位置,也是可以解决的~~
当指定启动模式为singleTask时,每次启动该活动的时候会首先瞅一瞅所有返回栈里面有没有那个 对的人 !如果有的话拉起来就跑,没有的话咱就好好待着,难道还怕没人要484.(ˇ^ˇ〉!

 <activity
        android:name="xxx"
        android:launchMode="singleTask">
       <intent-filter>
       .........
       </intent-filter> 
</activity>       

4.singleInstance/自己家矿不多了,挖别人的好了

预设场景:有一个活动太好用了,我们都想用怎么办嘞???共享喽。
但当我们同一个活动在不同返回栈中入栈的话必然要创建新的实例,怎么办呢?
活动Activity的四种启动模式初解
singleInstance模式,会有一个单独的返回栈来管理这个活动,无论谁来,都会在出行的单独返回栈中坐一坐。

 <activity
        android:name="xxx"
        android:launchMode="singleTask">
       <intent-filter>
       .........
       </intent-filter> 
</activity>       

假如同样的 A->B, B->C中, B 存在于单独的栈中,此时如果显示的是C页面,back键返回的时候,会从 CA 最后到 B,因为A和C是存在于一个返回栈中的,所以点击back键出栈的时候,先回到的是 A 页面,栈1 空了到 栈2,最后栈全空退出程序。

emmmm…

活动Activity的四种启动模式初解
说些啥嘞emmmmm… …
活动Activity的四种启动模式初解
对了,这些模式没有好坏之分,不同的使用方法最后的展示效果也是不一样的,主要看使用喽~~