背景知识

  • 任务栈(Task 栈) (也被称为返回栈(Back Stack))
    1. 任务栈用于存放用户开启的Activity
    2. 在应用程序创建之初,系统会启动一个Task栈(默认一个),并存储根Activity
    3. 新启动的 Activity 将会位于栈顶
    4. 当任务栈的最后一个 Activity 被销毁时,将清除任务栈并退出程序,下次再进入程序时会创建新的任务栈
  • taskAffinity属性
    1. 可以通过ActivitytaskAffinity属性来判断Task栈是否存在,以及Activity是否已经在Task栈中了
    2. Application 也有 taskAffinity 属性,它的值为 Manifest 的包名
    3. 获得 ActivitytaskId
      int taskId = getTaskId(); // 当前 Activity 所在 Task
      
    4. Service中必须通过设置 FLAG_ACTIVITY_NEW_TASK 才能启动 Activity

四种模式

  • standard模式:默认的模式,这种模式下,每次启动一个新的 Activity,都会创建一个新的 Activity实例,并将该实例放置在任务栈栈顶。所以如果通过点击创建 Activity,需要退回原状态,点了几次,就要按 Backup键 几次.
  • singleTop模式:创建一个新的 Activity 时,系统会检查该Activity是否位于任务栈栈顶,如果是的话就直接使用已存在栈顶的Activity
  • singleTask模式:与singleTop类似,不过这里是检查整个任务栈的活动,如果发现已经存在该Activity就将位于该活动上方的活动全部出栈,该 Activity 成为新的栈顶。
  • singleInstance模式:与上面几个模式都不同,系统会为该模式的 Activity 分配一个独立的任务栈,该任务栈有且只有一个该 Activity实例。换而言之,如果已经创建过目标 Activity 实例,那么将不会创建新的任务栈,二十直接唤醒之前创建过的的 Activity

备注

这四种模式中,standard模式是默认的模式,如果要使用其他三种模式,要在 AndroidMainFest 文件中进行修改(通过给对应的 activity 设置 launchMode 属性)