Android Activity的启动模式主要有四种,每种模式决定了Activity在系统中的生命周期和展示方式。以下是这四种启动模式的详细解释:
-
standard(标准模式):
- 这是默认的启动模式。
- 当创建一个新的Activity实例时,系统会首先检查该Activity是否已经在后台任务栈中存在。如果存在,系统会调用该Activity的
onNewIntent()
方法,并将新的Intent传递给该方法。如果不存在,系统会创建一个新的Activity实例并将其添加到任务栈的顶部。 - 在这种模式下,每次启动Activity时,系统都会为其创建一个新的实例,即使该Activity已经存在于任务栈中。
-
singleTop(单顶模式):
- 在这种模式下,如果Activity已经在任务栈的顶部(即该Activity是当前活动的最顶层Activity),那么当新的Intent被传递给该Activity时,系统不会创建新的实例,而是调用该Activity的
onNewIntent()
方法。 - 如果Activity不在任务栈的顶部,系统会像标准模式一样创建一个新的实例并将其添加到任务栈的顶部。
- 这种模式适用于需要在任务栈顶部保持一个特定Activity实例的场景,例如聊天应用的消息列表界面。
- 在这种模式下,如果Activity已经在任务栈的顶部(即该Activity是当前活动的最顶层Activity),那么当新的Intent被传递给该Activity时,系统不会创建新的实例,而是调用该Activity的
-
singleTask(单任务模式):
- 在这种模式下,系统会为每个Activity分配一个唯一的任务栈。当启动一个新的Activity时,系统会首先检查该Activity是否已经存在于某个任务栈中。如果存在,系统会将该Activity从当前任务栈中移除,并将其添加到新的任务栈中。
- 如果Activity不存在于任何任务栈中,系统会像标准模式一样创建一个新的实例并将其添加到新的任务栈中。
- 这种模式适用于需要将所有相关Activity组织在一个独立任务栈中的场景,例如导航应用的主界面。
-
singleInstance(单实例模式):
- 在这种模式下,系统会为每个Activity分配一个唯一的任务栈,并确保同一时刻只有一个Activity实例存在于该任务栈中。
- 当启动一个新的Activity时,如果该Activity已经存在于某个任务栈中,系统会将该Activity从当前任务栈中移除,并将其添加到新的任务栈中。即使新的任务栈已经包含该Activity的实例,系统也会这样做。
- 这种模式适用于需要确保同一时刻只有一个Activity实例存在于任务栈中的场景,例如设置应用的主设置界面。
请注意,不同的启动模式可能会影响Activity的状态和行为,因此在选择启动模式时需要根据具体的应用需求进行权衡。