简述
Activity 的启动方式有 4 种,分别是
- Standard(默认方式)
每次 start Activity 的时候都会创建新的 Activity 实例。 - SingleTop
在同一个 Task 中,如果 Activity 已经在该 Task 回退栈的栈顶,就不会再创建新的实例,而仅会调用 onNewIntent() 方法。如果不在栈顶,则会像默认启动方式一样,创建新的实例。 - SingleTask
这种方式会复杂些,默认不配置 taskAffinity 的情况下,start 该方式的 Activity 会在当前 Task 中处理启动逻辑。如果该 Task 回退栈中没有,则会新建实例,如果有且在栈顶则不会新建,仅调用 onNewIntent() 方法,如果不在栈顶,则会将该 Activity 按照栈的进出规则,将该 Activity 置为栈顶,并调用 onNewIntent() 方法。
若是配置了 taskAffinity 属性,在和启动该 Activity 的 Task affinity 属性不一致的情况下就会在新的 Task 中。 - SingleInstance
如果还没有创建出实例,则会为 Activity 创建一个实例,并且该实例会有独自的 Task 和 Task 回退栈。之后即使在 start 该 Activity 也不会再创建新的实例,而是一直沿用之前已经创建的,并调用 onNewIntent() 方法。
不进行额外配置的情况下默认 Standard 方式,如果要进行配置,可在 Manifest 文件里对应 Activity 中增加 launchMode 属性配置。
相关概念
- Task
Android 应用程序中用来完成某一操作的 Activity 序列,是一组相关的 Activity 集。(某一操作是什么维度,这个有待后续了解下,这里先记一下)
adb shell dumpsys activity
可用来查看 Activity 所在 Task
- Task 回退栈
即是对一组 Activity 的管理,通过栈的形式进行维护。栈顶 Activity 则对用户可见。 - taskAffinity
表示 Activity 的 task 属性,可以在 Manifest 文件中指定。
参考资料:
详解Activity启动模式(二)Activity的四种启动模式——LaunchMode
Android 中 Activity 四种启动模式和 taskAffinity 属性详解
解开 Android 应用程序组件 Activity 的“singleTask”之谜
五分钟彻底理解Android启动模式(上篇):任务栈和android-taskaffinity
网友评论