Activity的启动模式

在清单文件(AndroidManifest.xml)文件中的activity节点里有个属性android:launchMode就是指定Activity的启动模式. 其默认为标准模式(standard), 以下是四种模式:

 作用:影响activity在任务栈的顺序


1. 标准模式:standard

  开启目标activity页面,系统会创建一个新的activity对象,使其位于应用程序任务栈的栈顶。并且将其压入任务栈栈顶,而不管这个Activity是否已经存在。Activity的启动三回调(onCreate()->onStart()->onResume())都会执行。

  应用场景:默认情况


2. 单一顶部模式:singleTop

  开启目标activity,系统回去任务栈的栈顶查找有没有这个activity实例对象,如果有则复用栈顶的activity;所以它的启动三回调就不会执行,同时Activity的onNewIntent()方法会被回调.如果Activity已经存在但是不在栈顶,那么作用与standard模式一样.如果没有则创建

  常见应用:系统浏览器保存书签页


3. 单一任务模式:singleTask

  开启目标activity,系统回去整个任务栈查找,如果找到了这个activity,就清除这个activity上面的所有activity;如果没有找到,就在栈顶创建一个新的activity实例对象

  系统应用:浏览器


4. 单一实例模式:singleInstance

  开启目标activity,系统为这个activity单独创建一个任务栈。这种模式的Activity只能单独位于一个任务栈内,由于栈内复用的特性,后续请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了

  系统应用:系统的来电界面


Activity表签

android:launchMode="singleInstance"

透明界面

android:theme="@android:style/Theme.Translucent"

Activity的堆栈管理以ActivityRecord为单位,所有的ActivityRecord都放在一个List里面.可以认为一个ActivityRecord就是一个Activity栈

原文地址:https://www.cnblogs.com/loaderman/p/6415783.html