启动模式是通过在AndroidManifest.xml中activity标签中的launchMode设置的
android:launchMode指示应该如何加载一个activity.总共有四种启动模式,他们一般配合activity启动标记(FLAG_ACTIVITY_*常量)一起使用来决定当加载一个actiity时,系统该如何处理这个Intent.这四个启动模式依次是:
"standard"
"singleTop"
"singleTask"
"singleInstance"
缺省的是"standard"
正如在下表中将会看到的一样,这些启动on个模式被划分成两个组,"standard" 和"singleTop"一组,"singleTask" 和"singleInstance"属于另外一个组。以"standard" 或"singleTop"方式启动的activity可以被实例化很多次,他们的实例也可以属于任何 task,可以放在栈中的任何位置,典型的,他们一般通过 startActivity() 来加载到task中(除非启动 Intent设置了FLAG_ACTIVITY_NEW_TASK标记,在这种情况下会选进入一个不同的task--查看taskAffinity属性)
"standard" 和"singleTop"在一个方面不一样,如果是以"standard"方式启动的activity,每次都会实例化一个新的activity实例,每个实例对应一个Intent,类似的,"singleTop" 启动的activity也可能创建一个新的实例来处理相应的Intent,但是,如果目标task栈顶的activity正是要启动的activity,这个时候不会像"standard" 模式一样重新创建一个该activity实例,二十调用该activity的onNewIntent()方法。在其他情况下,例如"singleTop" 模式的activity已经在目标task中,但不是在栈顶,或者已经在栈顶,但不是在目标task中,这个时候,会像"standard" 模式一样创建一个该activity的新实例。
"singleTask" 和"singleInstance"两者也略有区别,一个"singleTask" 模式的activity允许其他的activity加入到他的task中,他永远是该task的root activity,但其他activity可以加载到该task中,相反,一个"singleInstance"模式的activity独占一个task,不运行其他的task加入到里面,如果从中启动activity,这个activity被安排到一个不同的task中,就像使用了FLAG_ACTIVITY_NEW_TASK一样。
就像上表中展示的一样,"standard"是缺省的模式,对于大部分activity来说它都是合适的模式,“singleTop”也是一个非常普遍且有用的模式对大多数activity.另外两中模式:“singleTask”和"singleInstance"对于大多数应用程序来说使用不多。因为他们会导致的交互模式对用户来说不太熟悉,和其他的应用程序相比也很不同。
不管你选择那种模式,确保测试一下activity的正确性 当加载它的时候或者从其他activity或者返回按钮导航到它时。