Activity的launchMode有四种
- standard
- singleTop
- singleTask
- singleInstance
默认的加载模式是standard。
四种加载模式主要分为两大类,standard和singleTop为一类,singleTask和singleInstance为一类。
使用standard或singleTop启动模式的Activity可多次进行实例化,实例可归属任何任务,并且可位于任务栈的任何位置。
使用singleTask和singleInstance启动模式的Activity,设备一次只能有一个实例。
standard和singleTop有一处不同,每次“standard” Activity有新的Intent时,系统都会创建新的类实例来响应该Intent,每个实例处理单个Intent。同样的,系统也会创建新的"singleTop"Activity实例来响应新的Intent,但是如果目标任务栈的栈顶已有一个Activity实例,则该实例会(通过调用onNewIntent())接收新的Intent;此时不会创建新实例。在其他情况下(例如,如果“singleTop
”Activity的某个现有实例虽在目标任务内,但未处于任务栈顶部,或者虽然处于任务栈顶部,但不在目标任务栈中),系统会创建新的实例并将其送入任务栈中。
“singleTask”和“singleInstance”模式同样只有一处不同:“singleTask”Activity允许其他Activity成为其任务的一部分,其他Activity(必然是“standard和“singleTop”Activity)可以启动到该任务中。另一方面,“singleInstance”Activity不允许其他Activity成为其任务的一部分。它是任务中唯一的Activity。如果它启动另一个Activity,则系统会将该Activity分配给其他任务。
用例 | 启动模式 | 多个实例 | 注释 |
---|---|---|---|
大多数Activity的正常启动 | “standard” | 是 | 系统在目标任务中创建新的实例,并向其传送Intent |
“singleTop” | 视情况而定 | 如果目标任务的顶部已存在Activity实例,则系统会通过调用该实例的onNewIntent()方法向其传送Intent,而非创建新的Activity实例。 | |
专用启动(不建议在一般情况下使用) | “singleTask” | 否 | 系统会在新任务中创建Activity实例并向其传送Intent。不过,如果存在Activity实例,则系统会调用该实例onNewIntent()方法(而非创建新的Activity实例),向其传送Intent。 |
“singleIntance” | 否 | 与"singleTask"相同,只是系统不会将任何其他Activity启动到包含实例的任务中,该Activity始终是其任务中的唯一Activity |