近期任务列表
Android 5.0(API 级别 21)引入了以文档为中心的模型。如果同一 Activity
的多个实例包含不同的文档,每一个文档可能各自都有一个任务,会在系统近期任务列表显示为任务。
可以使用 ActivityManager.AppTask
类来管理任务,并使用 Intent
标记来指定在近期任务列表添加或移除 Activity
的时间,还可以使用 <activity>
属性在清单中设置行为。
将任务添加到系统近期任务列表
使用 Intent
标记添加任务,可以更好地控制在近期任务列表中打开或重新打开文档的方式和时间。使用 <activity>
属性时,可以选择始终在新任务中打开文档或重复使用文档的现有任务。
使用 Intent 标记添加任务
为 Activity
创建新文档时,可以调用 startActivity()
方法并向启动该 Activity
的 intent 添加 FLAG_ACTIVITY_NEW_DOCUMENT
标记。
注意:
FLAG_ACTIVITY_NEW_DOCUMENT
标记取代了FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
标记,后者自 Android 5.0(API 级别 21)起已弃用。
如果在创建新文档时,同时设置了 FLAG_ACTIVITY_MULTIPLE_TASK
标记,则始终会以目标 Activity
为根来创建新任务。
注意:使用 FLAG_ACTIVITY_NEW_DOCUMENT 标记启动的 Activity 必须在清单中设置 android:launchMode="standard" 属性值(默认值)。
当主 Activity
启动一个新 Activity 时,系统会在现有任务中进行搜索,看是否任务的 intent
与该 Activity
的 intent
组件名称和 Intent
数据匹配。如果未找到该任务,或 intent
包含 FLAG_ACTIVITY_MULTIPLE_TASK
标记,那么将以该 Activity
为根创建一个新任务。如果找到该任务,则会将其带到最前端,并将新 intent 传递到 onNewIntent()。
使用 Activity 属性添加任务
Activity
还可以在其清单中使用 <activity>
属性 android:documentLaunchMode
指定始终启动到新任务。该属性具有四个值,在用户使用应用打开文档时分别会产生以下效果:
- "intoExisting"
Activity
重复使用文档的现有任务。这与设置了FLAG_ACTIVITY_NEW_DOCUMENT
标记但没有设置FLAG_ACTIVITY_MULTIPLE_TASK
标记的效果相同。 - "always"
Activity
会为文档创建新任务,即使文档已打开也一样。使用该值与同时设置了FLAG_ACTIVITY_NEW_DOCUMENT
和FLAG_ACTIVITY_MULTIPLE_TASK
标记的效果相同。 - "none"
Activity
不会为文档创建新任务。近期任务列表会以默认方式处理Activity
:它会显示应用的单个任务,该任务是从用户上次调用的任何Activity
恢复的。 - "never"
Activity
不会为文档创建新任务。设置该值会替换FLAG_ACTIVITY_NEW_DOCUMENT
和FLAG_ACTIVITY_MULTIPLE_TASK
标记的行为(如果在intent
中设置了任意一个),而且近期任务列表会显示应用的单个任务,该任务是从用户上次调用的任何 Activity 恢复的。
注意:如果值不是 none 和 never,必须使用 launchMode="standard" 定义 Activity。如果未指定此属性,会使用 documentLaunchMode="none"。
移除任务
默认情况下,当相关的 Activity
完成时,文档任务会自动从近期任务列表中移除。
可以使用 ActivityManager.AppTask
类、Intent
标记或 <activity>
属性来替换此行为。
将 <activity>
属性 android:excludeFromRecents 设置为 true,即可始终将任务从最近使用的应用屏幕中完全排除。
将 <activity>
属性 android:maxRecents 设置为一个整数,即可设置可在近期任务列表中包含的最大任务数。默认值为 16。一旦达到最大任务数,最早使用的任务将从最近使用的应用屏幕中移除。android:maxRecents 最大值为 50(内存较低的设备上为 25);小于 1 的值无效。
使用 AppTask 类移除任务
可以通过调用 finishAndRemoveTask()
方法来移除任务并结束与该任务相关联的所有 Activity
。
注意:使用 finishAndRemoveTask() 方法会替换 FLAG_ACTIVITY_RETAIN_IN_RECENTS 标记的使用,如下文所述。
保留已完成的任务
如果在任务的 Activity
结束后也希望在近期任务列表中保留它,可以将 FLAG_ACTIVITY_RETAIN_IN_RECENTS
标记传入启动该 Activity
的 Intent
。
要达到同样的效果,可以将 <activity>
属性 android:autoRemoveFromRecents 设置为 false。文档 Activity
的默认值为 true,常规 Activity
的默认值为 false。使用此属性会替换上文所述的 FLAG_ACTIVITY_RETAIN_IN_RECENTS 标记。