我的测试收藏AndroidAndroid开发

Activity 启动模式详解

2016-06-16  本文已影响182人  crianzy

Activity 启动模式设置方式

通过设置 launchMode 属性

<activity
   android:name=".main.view.SplashActivity"
   android:launchMode="singleTask">
</activity>

Android 有4种启动模式

standard(默认)

默认的启动模式, 每次都是打开新的Activity

singleTop

当要打开的Activity的在栈顶时, 不打开新页面,会调用当前栈顶Activity的 onNewInetent() 方法
如果不在栈顶 则打开一个新的 Activity

singleTask

当如果在栈中存在该Activity时

则把该Activity 上面的所有Activity 都移除, 而且还会调用 onNewInetent() 方法

例子如下:

假设 A 的启动模式 是 singleTask

当前栈中 有 B C A C D, 栈顶是D

当D 要启动 A 时, 由于 A 是 singleTask

那么 系统会把 A 上面的 CD 都移除

然后调用 A 的 onNewInetent 方法

处理后的结果是:

当前栈中 有 B C A , 栈顶是A

如果当前栈中 不存在 该Activity时

则新建一个Activity

singleInstance

表示栈中只有一个 我一个Activity 不能存在其他Activity

示例:

假设 A,B, 是普通的standard 启动模式, C 是 singleInstance 启动模式, D 是 singleTask启动模式

  1. A -> B 正常
  1. A -> B -> C 正常启动C, C在一个单独的栈中
  1. A -> B -> C -> D正常启动D, D 与AB 在一个栈中

但是在

D 按返回的时候 回到的是B,
B 按返回的时候 回到的是A
A 按返回的时候 回到的是C

  1. A -> B -> C -> D -> C 这里没有重新创建C 走了C 的onNewIntent 方法

返回的路线是: C -> D -> B -> A

由以上例子可以得出以下结论:

上一篇下一篇

猜你喜欢

热点阅读