Activity的启动模式及应用场景
Activity的启动模式如今说起来似乎是个古老的话题,可又不得不承认它是个很重要的内容,从android诞生到现在,这些启动模式一直在发挥着作用,只不过不容易被人感觉到它们的存在。我们随手敲下一行startActivity代码就伴随着一个启动该activity的启动模式。这些启动模式将会影响到应用的返回行为。从A启动B,再按back键,会返回到A吗?不一定。为什么呢?请往下看。
关于task
在介绍启动模式之前有必要先介绍一下android中Task的概念,因为它与activity息息相关。引用 官网 的话来说:
Task是用户在执行某项工作时与之互动的一系列 Activity 的集合。这些 Activity 按照每个 Activity 打开的顺序排列在一个返回堆栈中。
通俗地讲,Task就是一个栈,里面放了很多activity,当你按back键的时候系统会将当前task的栈顶activity出栈,然后在屏幕上显示新的栈顶activity。看一下下面这个图:
介绍完task,接下来具体说一说activity的4种启动模式:
一、standard(标准模式,也是默认启动模式)
standard是最常用的一种启动模式,使用该模式启动Activity,每次启动一个Activity都会重写创建一个新的实例,不管这个实例存不存在,这种模式下,谁启动了该模式的Activity,该Activity就属于启动它的Activity的任务栈中。
但是,如果直接在Application中以标准模式启动Activity,则会报出以下错误(Android7、Android8除外):
Calling startActivi