我问你答-简述 Activity 的启动方式

简述

Activity 的启动方式有 4 种,分别是

  1. Standard(默认方式)
    每次 start Activity 的时候都会创建新的 Activity 实例。
  2. SingleTop
    在同一个 Task 中,如果 Activity 已经在该 Task 回退栈的栈顶,就不会再创建新的实例,而仅会调用 onNewIntent() 方法。如果不在栈顶,则会像默认启动方式一样,创建新的实例。
  3. SingleTask
    这种方式会复杂些,默认不配置 taskAffinity 的情况下,start 该方式的 Activity 会在当前 Task 中处理启动逻辑。如果该 Task 回退栈中没有,则会新建实例,如果有且在栈顶则不会新建,仅调用 onNewIntent() 方法,如果不在栈顶,则会将该 Activity 按照栈的进出规则,将该 Activity 置为栈顶,并调用 onNewIntent() 方法。
    若是配置了 taskAffinity 属性,在和启动该 Activity 的 Task affinity 属性不一致的情况下就会在新的 Task 中。
  4. SingleInstance
    如果还没有创建出实例,则会为 Activity 创建一个实例,并且该实例会有独自的 Task 和 Task 回退栈。之后即使在 start 该 Activity 也不会再创建新的实例,而是一直沿用之前已经创建的,并调用 onNewIntent() 方法。

不进行额外配置的情况下默认 Standard 方式,如果要进行配置,可在 Manifest 文件里对应 Activity 中增加 launchMode 属性配置。

相关概念

  1. Task
    Android 应用程序中用来完成某一操作的 Activity 序列,是一组相关的 Activity 集。(某一操作是什么维度,这个有待后续了解下,这里先记一下)
adb shell dumpsys activity

可用来查看 Activity 所在 Task

  1. Task 回退栈
    即是对一组 Activity 的管理,通过栈的形式进行维护。栈顶 Activity 则对用户可见。
  2. taskAffinity
    表示 Activity 的 task 属性,可以在 Manifest 文件中指定。

参考资料:
详解Activity启动模式(二)Activity的四种启动模式——LaunchMode
Android 中 Activity 四种启动模式和 taskAffinity 属性详解
解开 Android 应用程序组件 Activity 的“singleTask”之谜
五分钟彻底理解Android启动模式(上篇):任务栈和android-taskaffinity

你可能感兴趣的:(我问你答-简述 Activity 的启动方式)