Files
ActivityLaunchMode/README.md
linglongxin24 4f3b5b9ea8 edit README.md
2016-11-18 18:58:26 +08:00

3.2 KiB
Raw Blame History

#深入ActivityActivity启动模式LaunchMode完全解析

在平时的开发中我们可能会了解到Activity的任务栈还有Activity的启动模式。那么Activity的启动模式都分别是怎么样的呢如果设置了这些启动模式对任务栈有事么影响 还有就是这么启动模式在实际的开发中有事么应用呢这里用图例和demo来分析一下Activity的启动模式。

Demo图 Demo图

#1.Standard标准启动模式 Activity的默认模式所有的Activity元素遵循先进后出的进栈出栈的特性这种的比较简单

启动顺序A->B->C 回退顺序C->B->A. Standard #2.SingleTop:栈顶复用模式 栈顶复用模式如果想要打开的activity在任务栈的栈顶已经存在就不会创重新建新的实例而是调用该Activity的 onNewIntent() 方法。避免栈顶的activity被重复的创建。 例如A.B启动模式为StandardC启动模式为SingleTop 启动顺序A->B->C—>C 回退顺序C->B->A.而不是C->C->B->A

SingleTop 应用如下:

  • 点击通知栏重复打开Activity的问题 在全新的Android通知栏,已抛弃setLatestEventInfo,兼容高版本 这篇文章里面 我们打开一个通知栏点击通知栏默认打开MainActivity有一个问题就是如果不设置MainActivity的launchMode就会每次点击通知栏的时候会重新打开一个Activity。 我们可以将MainActivity的启动模式设置为SingleInstance就不会再重新打开MainActivity而是调用MainActivity的onNewIntent() 方法。
  • 可以解决按钮重复点击的问题当然这种启动模式不是为了去解决这个问题在这里这是说为了用这么应用去说明SingleTop启动模式

#3.SingleTask:栈内复用模式 如果想要启动的Activity在当前栈内启动之后该activity只会在任务栈里面存在一个实例。如果要再次打开这个activity在任务栈里面如果已经存在就不会创建新的activity 而是复用栈内的这个已经存在的activity调用改Activity的 onNewIntent() 方法并且清空这个activity任务栈上面所有的activity。

例如A.B.C启动模式为StandardC启动模式为SingleTop 启动顺序A->B->C—>C 回退顺序C->B->A.而不是C->C->B->A

SingleTop 应用如下:

#4.SingleInstance单一实例模式 在整个Android系统中(可能会有很多任务栈)里面只有一个实例存在。不同的应用程序app去启动这个activity就会共享公用同一个activity。 他会运行在自己单独的的任务栈里面,并且这个单独的任务栈里面只会存在着一个实例。 应用场景系统的发短信打电话来电浏览器等。这种模式在平时很少去使用一般在Launcher中可能会用到。