Activity 的四种启动模式 ( launchMode )

下面的示例都是以 OneActivity 为第一个Activity ;修改启动模式也只修改的 OneActivity 的启动模式。

1. standard 默认启动模式,加入相关代码或者不加:

    android:launchMode="standard"

    特点:每次跳转系统都会在 task 中生成一个新的 Activity 实例,并且放于栈结构的顶部,不管有没有已存在。

    example :OneActivity ==> TwoActivity ==> OneActivity ; 此时会创建新的 TwoActivity 和 OneActivity ,返回时会一层一层返回到第一个 OneActivity 。

2. singleTop 栈顶复用启动模式,加入相关代码:

    android:launchMode="singleTop"

    特点:跳转到一个 Activity ,如果该 Activity 不是位于栈顶,则新创建 Activity ;如果该 Activity 位于栈顶,则重复利用,不再生成新的实例。

    example :OneActivity ==> TwoActivity ==> OneActivity ;此时 OneActivity 位于栈顶,则把 OneActivity 拿出来,实现复用,不会创建新的 OneActivity ,返回时会一层一层返回到第一个 OneActivity  。如果 OneActivity ==> TwoActivity ==> ThreeActivity ==> TwoActivity ;此时 TwoActivity 不是位于栈顶,则再次创建新的 TwoActivity ,返回时会一层一层返回到第一个 OneActivity 。

3. singleTask 单任务启动模式,加入相关代码:

    android:launchMode="singleTask"

    特点:跳转到一个Activity ,如果该 Activity 已经存在,则直接拿出复用,其他 Activity 实例统统出栈。

    example :OneActivity ==> TwoActivity ==> ThreeActivity ==> OneActivity ;该栈中存在 OneActivity ,会把 OneActivity 拿出来复用, TwoActivity ,ThreeActivity 会出栈,返回时直接退出该 App 。

4. single Instance 单实例模式,加入相关代码:

     android:launchMode="singleInstance"

     特点:这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入(认真看例子)。

     example :先将 OneActivity 的启动模式改为默认( standard )的,再将 TwoActivity 的启动模式改为单实例模式( singleInstance ),下面的操作为: OneActivity ==> TwoActivity ==> ThreeActivity ;当前在 ThreeActivity ,按下返回键会发现,返回到了 OneActivity ,再按下返回键返回到了 TwoActivity 。为什么会这样。。。原因是:当跳转到 TwoActivity 时,重新启用了一个新的栈结构,再进入 ThreeActivity 再次回到了原来的栈结构并且创建了 ThreeActivity 实例( OneActivity 与 ThreeActivity 是位于同一个栈结构,而 TwoActivity 是在一个新的栈结构中 ),这种情况下按下返回键,会先返回到同一栈结构的 OneActivity ,再按下返回键则返回到新创建栈结构的 TwoActivity 。

上面是本人对启动模式的认识与理解,自己动手写一个例子看会更加清晰明白,如果有不对的地方,欢迎大家指出,本人积极改正,下面是本人博客:

https://blog.csdn.net/wuqingsen1

猜你喜欢

转载自blog.csdn.net/wuqingsen1/article/details/82116849