AndroidAPI学习——任务和返回栈

来源:互联网 发布:淘宝中的淘气值能干嘛 编辑:程序博客网 时间:2024/05/19 12:38

任务是指在执行特定作业时与用户交互的一系列Activity,这些Activity按照各自的打开顺序排列在堆栈中。

管理任务

使用清单文件元素中的属性和传递给startActivity()的Intent中的标志,可以执行一些非正常的操作。

可以使用的主要属性有:
taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch
可以使用的Intent标志包括:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP

定义启动模式

使用清单文件
在清单文件中声明Actiavity时,您可以指定Activity在启动时应该如何与任务关联。
使用Intent标志
调用startActivity()时,可以在Intent中加入一个标志,声明新Activity是否与当前任务关联。

使用清单文件
在清单文件中声明 Activity 时,您可以使用 元素的 launchMode 属性指定 Activity 应该如何与任务关联。

“standard”:
默认。系统在启动 Activity 的任务中创建 Activity 的新实例并向其传送 Intent。Activity 可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例。

“singleTop”:
如果当前任务的顶部已存在 Activity 的一个实例,则系统会通过调用该实例的 onNewIntent() 方法向其传送 Intent,而不是创建 Activity 的新实例。

“singleTask”:
系统创建新任务并实例化位于新任务底部的 Activity。但是,如果该 Activity 的一个实例已存在于一个单独的任务中,则系统会通过调用现有实例的 onNewIntent() 方法向其传送 Intent,而不是创建新实例。

“singleInstance”:
与 “singleTask” 相同,只是系统不会将任何其他 Activity 启动到包含实例的任务中。该 Activity 始终是其任务唯一仅有的成员;由此 Activity 启动的任何 Activity 均在单独的任务中打开。

处理关联

“关联”指示Activity优先属于哪个任务。默认情况下,同一应用中的所有Activity彼此关联。因此,默认情况下,同一应用中的所有Activity优先位于相同任务中。
可以使用元素的taskAffinity属性修改任何给定Activity的关联。
该值取字符串值,必须不同于在mainfest元素中声明的默认软件包名称。

在两种情况下,关联会起作用:

  • 启动Activity的Intent包含 FLAG_ACTIVITY_NEW_TASK标志。
  • Activity将其allowTaskReparenting属性设置为”true”

清理返回栈

如果用户长时间离开任务,则系统会清除所有Activity的任务,根Activity除外,当用户再次回到任务时,仅恢复根Activity。
可以使用下列几个属性修改此行为:

  • alwaysRetainTaskState:如果在任务的根 Activity 中将此属性设置为 “true”,则不会发生刚才所述的默认行为。即使在很长一段时间后,任务仍将所有 Activity 保留在其堆栈中。
  • clearTaskOnLaunch:如果在任务的根 Activity 中将此属性设置为 “true”,则每当用户离开任务然后返回时,系统都会将堆栈清除到只剩下根 Activity。 换而言之,它与 alwaysRetainTaskState 正好相反。 即使只离开任务片刻时间,用户也始终会返回到任务的初始状态。
  • finishOnTaskLaunch:此属性类似于 clearTaskOnLaunch,但它对单个 Activity 起作用,而非整个任务。 此外,它还有可能会导致任何 Activity 停止,包括根 Activity。 设置为 “true” 时,Activity 仍是任务的一部分,但是仅限于当前会话。如果用户离开然后返回任务,则任务将不复存在。

启动任务

<activity ... >    <intent-filter ... >        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />    </intent-filter>    ...</activity>
0 0
原创粉丝点击