activity有四种启动模式,分别为:
- standard
- singleTop
- singleTask
- singleInstance
standard
默认启动方式。系统在启动 Activity 的任务中创建 Activity 的新实例并向其传送 Intent。Activity 可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例。A--->B---->C---->B----->A
singleTop
如果当前任务的顶部已存在 Activity 的一个实例,则系统会通过调用该实例的 onNewIntent() 方法向其传送 Intent,而不是创建 Activity 的新实例。Activity 可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例(但前提是位于返回栈顶部的 Activity 并不是 Activity 的现有实例)。
一个activity的“ standard ”或“ singleTop “启动模式可以多次实例化。 实例可以属于任何任务(task)并且可以位于activity栈的任何地方。
通常情况下,他们调用 startActivity() 启动(除非Intent对象包含一个 FLAG_ACTIVITY_NEW_TASK 指令,在这种情况下,activity将选择一个新的任务(task))。
singleTask 和 singleInstance
singleTask
系统创建新任务并实例化位于新任务底部的 Activity。但是,如果该 Activity 的一个实例已存在于一个单独的任务中,则系统会通过调用现有实例的 onNewIntent() 方法向其传送 Intent,而不是创建新实例。一次只能存在 Activity 的一个实例。
singleInstance
与 “singleTask” 相同,只是系统不会将任何其他 Activity 启动到已经包含实例了的任务中。该 Activity 始终是其任务唯一仅有的成员;由此 Activity 启动的任何 Activity 均在单独的任务中打开。
相比之下,“ singleTask ”和“ singleInstance ”启动模式的activity 只能启动在一个任务中。 他们总是在activity栈的顶部。 此外,该设备仅维持一次并且仅一个activity的实例–仅在一样的任务中。