学习Activity的启动模式之前,首先要明白Android中任务和返回栈的概念。Android官方API指南:任务是指在执行特定作业时与用户交互的一些列Activity。这些Activity按照各自的打开销魂许排列在堆栈(即返回栈)中。
任务可以理解为就是一系列Activity,返回栈就是存放Activity的栈堆。返回栈最重要的一点:即返回栈中的Activity永远不会重新排列。
启动模式(launchMode)
在清单文件声明Activity时,使用<activity>元素中的launchMode属性 指定Activity如何与任务关联。launchMode属性启动模式有四种。
“standard” 默认模式
系统在启动Activity的任务中创建Activity的新实例并向其传送intent。Activity可以多次实例化,而每个实例均可属于不通的任务,并且一个任务可以拥有多个实例。
standard 模式的Activity在API21以下有不同的表现。启动Activity的intent如果来自同一个应用,API21上下的表现是一样的。如果启动Activity的intent来自不同的应用,API21以下Activity将和发送intent的Activity处于同一个人任务当中。API21及以上会创建一个新任务,同时Activity将作为新任务的根Activity。
“singleTop”
singleTop模式基本和standard模式一样,唯一的区别是,启动的Activity已经处于返回栈栈顶,此时不会创建新的Activity实例,而是直接调用该activity实例的onNewIntent()方法。
”singleTask“
系统创建新任务并实例化位于新任务底部的Activity。如果该Activity的一个实例已经存在于一个单独的任务中,则系统会通过调用现有实例的onNewIntent()向其传递intent,而不创建新实例。
singleTask模式关键就在于是否设置taskAffinity
<activity android:name=".launchMode.SingleTaskActivity" android:launchMode="singleTask" android:taskAffinity=""> </activity>
如果设置了taskActivity就会创建新任务,否则并不会创建新任务。不过不管是否创建新任务,如果Activity实例已经存在任务中都回调用onNewIntent()向其传递intent,同时弹出所有在次Activity实例之上的activity。
"singleInstance"