概述屏幕
在该文献
添加任务的概述屏幕
使用意向标志添加任务
使用活动属性添加任务
删除任务
使用AppTask类删除任务
护完成的任务
ActivityManager.AppTask
意图
示例代码
文档为中心的应用程序
概览屏幕(也称最近通话屏幕,最近的任务列表,或近期应用程序)是一个系统级的用户界面,列出了最近访问过的活动和任务。用户可以通过浏览列表,选择一个任务恢复,或者用户可以通过滑动它拿走从列表中删除的任务。随着Android 5.0版本(API等级21),包含不同的文件在同一活动的多个实例可能会出现在总览画面的任务。例如,谷歌驱动器可能对每个几个谷歌文档的任务。每个文档出现在总览画面的任务。
图1显示三个谷歌云端硬盘文档总览画面,每个代表作为单独的任务。
通常情况下,你应该让系统定义如何您的任务和活动总览画面中的代表,而你不需要修改此行为。然而,你的应用程序可以决定如何以及何时和活动出现在总览画面。该ActivityManager.AppTask类可用于管理任务和意图类的活动标志让你指定在一个活动中添加或总览画面中删除。此外,<活动>属性让你设置在清单的行为。
添加任务的概述屏幕
使用Intent类的标志来添加任务能提供何时以及如何文档被打开或在总览画面重新开启了更大的控制权。当您使用<Activity>属性,你可以随时与一个新的任务打开文档或重复的文档现有任务进行选择。
使用意向标志添加任务
当您为您的活动一个新的文档,可以调用ActivityManager.AppTask类的startActivity()方法,传递给它一个启动该活动的意图。要插入一个逻辑断点,使系统处理您的活动在总览画面的新任务,通过在addFlags(的FLAG_ACTIVITY_NEW_DOCUMENT标志启动活动意向)方法。
注:FLAG_ACTIVITY_NEW_DOCUMENT标志取代了FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET标志,这是不赞成的是Android 5.0(API等级21)。
如果当您创建新文档设置FLAG_ACTIVITY_MULTIPLE_TASK标志,系统总是会创建目标活动作为根新任务。此设置允许在同一文档以在一个以上的任务被打开。下面的代码演示的主要活动是如何做到这一点:
DocumentCentricActivity.java
public void createNewDocument(View view) {
final Intent newDocumentIntent = newDocumentIntent();
if (useMultipleTasks) {
newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
}
startActivity(newDocumentIntent);
}
private Intent newDocumentIntent() {
boolean useMultipleTasks = mCheckbox.isChecked();
final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
return newDocumentIntent;
}
private static int incrementAndGet() {
Log.d(TAG, "incrementAndGet(): " + mDocumentCounter);
return mDocumentCounter++;
}
}
注:与FLAG_ACTIVITY_NEW_DOCUMENT标志发起活动必须具备的android:launchMode =“标准”属性,在清单的设定值(默认值)。
当主活动启动一个新的活动,该系统通过一个其意图的意图组件名称和该活动的意向数据匹配现有任务搜索。如果没有找到该任务,或意图包含在FLAG_ACTIVITY_MULTIPLE_TASK标志,一个新的任务将与活动作为它的根来创建。如果找到一个,它带来了任务到前面,并传递新的意图onNewIntent()。新的活动得到的意图,并创建总览画面中一个新的文档,如下面的例子:
NewDocumentActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_document);
mDocumentCount = getIntent()
.getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0);
mDocumentCounterTextView = (TextView) findViewById(
R.id.hello_new_document_text_view);
setDocumentCounterText(R.string.hello_new_document_counter);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
/* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity
is reused to create a new document.
*/
setDocumentCounterText(R.string.reusing_document_counter);
}
使用活动属性添加任务
活动还可以在其清单,它总是使用<活动>属性,Android的推出进入一个新的任务:documentLaunchMode。它的属性产生当用户打开与应用程序的文档以下效果四个值:
“intoExisting”
活性重用为文档现有任务。这是相同的设定FLAG_ACTIVITY_NEW_DOCUMENT标志而不设置FLAG_ACTIVITY_MULTIPLE_TASK标志,如使用意图标志添加任务,如上所述。
"
always
"
的活动创建的文档的新的任务,即使文档已打开。使用此值是相同的同时设置FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK标志。
"
none”
"
活动不创建文档新任务。总览画面对待活动,因为它会默认为:它显示的应用程序,这无论从任何活动恢复最后调用用户的单个任务。
"
never
"
活动不创建文档新任务。设置该值将覆盖FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK标志的行为,如果这些在意向设置,并概述屏幕显示的应用程序,这无论从任何活动恢复最后调用用户的单个任务。
注意:对于比没有,从来没有在活动的其他值必须以launchMode =“标准”的定义。如果未指定此属性,documentLaunchMode =“无”字。
删除任务
默认情况下,当其活性完成文档的任务会自动从总览画面中删除。您可以覆盖与ActivityManager.AppTask类此行为,用一个Intent标志,或用<活动>属性。
excludeFromRecents为true:你总是可以完全由<活动>属性,设定Android排除总览画面的任务。
您可以设置任务,你的应用可以包括通过设置<活动>概览屏幕的最大数量属性的android:maxRecents为整数值。默认值是16,当到达任务的最大数目时,最近最少使用的任务是从所述总览屏幕中移除。 Android的:maxRecents最大值为50(25低内存设备上);值小于1是无效的。
使用AppTask类删除任务
在总览画面中创建一个新的任务活动,您可以指定当通过调用finishAndRemoveTask()方法来删除该任务,并完成与它相关的所有活动。
NewDocumentActivity.java
public void onRemoveFromRecents(View view) {
// The document is no longer needed; remove its task.
finishAndRemoveTask();
}
护完成的任务
如果您想保留在总览画面一个任务,即使它的活动结束后,通过在addFlags的FLAG_ACTIVITY_RETAIN_IN_RECENTS标志(即启动该活动的意向)方法。
DocumentCentricActivity.java
private Intent newDocumentIntent() {
final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS);
newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
return newDocumentIntent;
}
为了达到同样的效果,将<活动>属性的android:autoRemoveFromRecents为false。默认值是为Document活动真,假的经常性活动。使用此属性将覆盖FLAG_ACTIVITY_RETAIN_IN_RECENTS标志,前面所讨论的。