Activity中的属性
- taskAffinity
- launchMode
- allowTaskReparenting
- clearTaskOnLaunch
- alwaysRetainTaskState
- finishOnTaskLaunch
<a id="launchMode" name="launchMode">launchMode</a>
- standard (默认启动方式)
可以被实例化多次,一个任务可以有多个此Activity实例 - singleTop
如果当前任务顶部已存在实例,通过Intent启动Activity不会创建新的实例。可以被实例化多次,每个实例可以位于不同的任务,一个任务中可以有多个此实例。 - singleTask
创建新任务并实例化Activity,如果Activity在已有的任务中存在实例,则系统会通过调用现有实例的 onNewIntent()
方法向其传送 Intent(对同一任务中位于此实例前面的Activity执行出栈),而不是创建新实例。一次只能存在 Activity 的一个实例。(一般应用Activity不建议使用此模式,MainActivity除外)
注:未指定taskAffinity情况下实例化 singleTask的Activity并不一定创建新的任务,新实例化的Activity可能会进入已有的任务中,除非指定与包名不同的taskAffinity(个人理解) - singleInstance
与 "singleTask" 相同,只是系统不会将任何其他 Activity 启动到包含实例的任务中。该 Activity 始终是其任务唯一仅有的成员;由此 Activity 启动的任何 Activity 均在单独的任务中打开(一般应用Activity不建议使用此模式)
<a id="taskAffinity"> </a>
<a id="taskAffinity">taskAffinity</a>
taskAffinity指示 Activity 优先属于哪个任务。默认情况下,同一应用中的所有 Activity 彼此关联。 因此,默认情况下,同一应用中的所有 Activity 优先位于相同任务中。 不过,您可以修改 Activity 的默认关联。 在不同应用中定义的 Activity 可以共享关联,或者可为在同一应用中定义的 Activity 分配不同的任务关联。
taskAffinity在一下两种情况有效:
- 启动 Activity 的 Intent 包含 FLAG_ACTIVITY_NEW_TASK
标志 - Activity 将其 allowTaskReparenting
属性设置为 "true"
<a id="allowTaskReparenting" name="allowTaskReparenting">allowTaskReparenting </a>
如果在任务的根 Activity 中将此属性设置为 "true",则不会发生刚才所述的默认行为。即使在很长一段时间后,任务仍将所有 Activity 保留在其堆栈中
<a id="clearTaskOnLaunch" name="clearTaskOnLaunch">clearTaskOnLaunch </a>
它与 alwaysRetainTaskState 正好相反。 即使只离开任务片刻时间,用户也始终会返回到任务的初始状态
<a id="alwaysRetainTaskState" name="alwaysRetainTaskState">alwaysRetainTaskState </a>
此属性类似于 clearTaskOnLaunch ,但它对单个 Activity 起作用,而非整个任务。 此外,它还有可能会导致任何 Activity 停止,包括根 Activity。 设置为 "true"
时,Activity 仍是任务的一部分,但是仅限于当前会话。如果用户离开然后返回任务,则任务将不复存在。
<a id="finishOnTaskLaunch" name="finishOnTaskLaunch"> finishOnTaskLaunch</a>
每当用户再次启动其任务(在主屏幕上选择任务)时,是否应关闭(完成)现有 Activity 实例 —“true”表示应关闭,“false”表示不应关闭。 默认值为“false”。如果该属性和 allowTaskReparenting 均为“true”,则优先使用该属性。 Activity 的亲和关系会被忽略。 系统不是更改 Activity 的父项,而是将其销毁。