首页  /  预约专享  /  “最近”屏幕

“最近”屏幕

预约专享 1986

“最近使用的应用”屏幕,也称为“概览”屏幕,表示近期任务

或“最近用过的应用”屏幕,这是系统级界面,其中会列出

activity 和 tasks。

用户可以浏览列表、选择某个任务

恢复任务,或者通过滑开任务将其从列表中移除。

“最近使用的应用”屏幕使用以文档为中心的

模型 - 在 Android 5.0 (API

(例如第 21 级)- 在这种情况下,

包含不同文档的相同活动可以在

“最近”屏幕。例如,Google 云端硬盘的每一项

一些 Google 文档。每个文档都以任务的形式显示在“最近”

屏幕:

显示两个 Google 云端硬盘的“最近使用的应用”屏幕

每个文档都表示为一项单独的任务。

另一个常见的例子是,用户使用浏览器点按

分享 >Gmail。系统会显示 Gmail 应用的写邮件屏幕。点按

当时的“最近”按钮会显示 Chrome 和 Gmail 是分开运行的

任务:

显示 Chrome 和 Gmail 的“最近使用的应用”屏幕

作为单独的任务运行

通常,您可以让系统定义任务和 activity 的

最近使用的应用屏幕中显示的内容。您无需修改此内容

行为不过,您的应用可以确定 activity 以何种方式以及何时在

“最近”屏幕。

通过

ActivityManager.AppTask

类可用来管理任务以及

Intent 类可让您指定

从“Recents”屏幕添加或移除 activity。此外,

属性可用于设置

行为

向“最近使用的应用”屏幕添加任务

使用 Intent 类的标志执行以下操作:

可让您更好地控制

已在“最近”屏幕中重新打开。当您使用

属性,您可以

选择始终在新任务中打开文档,或重复使用现有任务,

指定文档任务。

使用 Intent 标志添加任务

为 Activity 创建新文档时,您可以调用

startActivity()

方法,向其传递启动 activity 的 intent。要插入逻辑

以便系统将您的 activity 视为“最近使用的应用”中的新任务

屏幕上,传递

FLAG_ACTIVITY_NEW_DOCUMENT

addFlags()中的

Intent 的方法来启动

活动。

注意 :

FLAG_ACTIVITY_NEW_DOCUMENT

标志会替换

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

标志,后者在 Android 5.0(API 级别 21)中已废弃。

如果您将 FLAG_ACTIVITY_MULTIPLE_TASK

标志时,系统始终会使用

目标 activity 作为根。此设置可让系统

已在多项任务中打开。以下代码演示了主

activity 会执行下列操作:

Kotlin

fun createNewDocument(view: View) {

val newDocumentIntent = newDocumentIntent()

if (useMultipleTasks) {

newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)

}

startActivity(newDocumentIntent)

}

private fun newDocumentIntent(): Intent =

Intent(this, NewDocumentActivity::class.java).apply {

addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or

android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS)

putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++)

}

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 = checkbox.isChecked();

final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);

newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);

newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++);

return newDocumentIntent;

}

}

注意 :使用 FLAG_ACTIVITY_NEW_DOCUMENT 标志启动的 activity 必须具有

在android:launchMode="standard"

清单。

当主 activity 启动一个新 activity 时,系统会

现有任务(其 intent 与 intent 组件名称和

intent 数据。如果未找到任务或包含的 intent

FLAG_ACTIVITY_MULTIPLE_TASK

标志会创建一个新任务,并以该 activity 作为其根。

如果系统找到 intent 与 intent 组件名称匹配的任务,并且

intent 数据,它会将该任务置于最前面,并将新 intent 传递给

onNewIntent()。

新 activity 获取 intent,并在“最近使用的应用”中创建一个新文档

屏幕,如以下示例所示:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_new_document)

documentCount = intent

.getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0)

documentCounterTextView = findViewById(R.id.hello_new_document_text_view)

setDocumentCounterText(R.string.hello_new_document_counter)

}

override fun onNewIntent(newIntent: Intent) {

super.onNewIntent(newIntent)

/* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this Activity

will be reused. */

setDocumentCounterText(R.string.reusing_document_counter)

}

Java

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_new_document);

documentCount = getIntent()

.getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0);

documentCounterTextView = (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);

}

使用 activity 属性添加任务

activity 还可以在其清单中指定始终启动到新的

使用

属性 android:documentLaunchMode。

该属性有四个值,

使用应用程序打开文档:

intoExisting

Activity 重复使用文档的现有任务。这相当于将

FLAG_ACTIVITY_NEW_DOCUMENT

标志,而不设置

FLAG_ACTIVITY_MULTIPLE_TASK

使用 Intent 标志添加任务部分。

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 中设置了其中任一功能,并且“最近使用的应用”屏幕

为应用显示单个任务,则应用会从

上次调用用户的时间。。

注意: 对于除 none 和 never 以外的值,必须使用

launchMode="standard"。如果未指定此属性,

documentLaunchMode="none"。

移除任务

默认情况下,文档任务会自动从“最近使用的应用”屏幕中退出

在其 activity 结束时触发。您可以使用

ActivityManager.AppTask

类,或者使用 Intent 标志

属性。

您可以随时将任务从“最近使用的应用”屏幕中完全排除,只需设置

属性

android:excludeFromRecents

发送至 true。

您可以设置您的应用在

通过设置

属性

android:maxRecents更改为

整数值。达到任务数量上限后,

最近使用时间最少的任务会从“最近使用的应用”屏幕中消失。默认值为 16

最大值为 50(内存较小的设备上为 25)。隐藏部分值

都无效。

使用 AppTask 类移除任务

在“最近使用的应用”屏幕中创建新任务的 activity 中,您可以执行以下操作:

可指定何时移除任务并完成与其关联的所有活动,方法是

调用

finishAndRemoveTask()

方法:

Kotlin

fun onRemoveFromOverview(view: View) {

// It is good pratice to remove a document from the overview stack if not needed anymore.

finishAndRemoveTask()

}

Java

public void onRemoveFromRecents(View view) {

// The document is no longer needed; remove its task.

finishAndRemoveTask();

}

注意 :使用

finishAndRemoveTask()

方法会覆盖使用

FLAG_ACTIVITY_RETAIN_IN_RECENTS

标记。

保留已完成的任务

如果您想在“最近使用的应用”屏幕中保留某个任务(即使其 activity 已

之后,传递

FLAG_ACTIVITY_RETAIN_IN_RECENTS

标记(位于

addFlags() 方法(属于

intent 启动 activity。

Kotlin

private fun newDocumentIntent() =

Intent(this, NewDocumentActivity::class.java).apply {

addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or

android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS)

putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement())

}

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, getAndIncrement());

return newDocumentIntent;

}

要达到同样的效果,请将

属性

android:autoRemoveFromRecents

发送至 false。对于文档 activity,默认值为 true;对于文档 activity,默认值为 false

常规活动。使用此属性会覆盖

FLAG_ACTIVITY_RETAIN_IN_RECENTS 标志。

启用近期网址共享功能(仅限 Pixel)

在搭载 Android 12 或更高版本的 Pixel 设备上,用户可以分享链接

查看最近浏览过的网页内容。参观

应用中的内容,用户可以滑动到“最近使用的应用”屏幕并找到该应用

然后点按链接按钮即可复制或分享

网址。

包含共享链接的“最近使用的应用”屏幕

近期查看过的网页内容。

任何应用都可以通过提供网页界面来为用户启用“最近用过”链接,以及

覆盖

onProvideAssistContent()、

如以下示例中所示:

Kotlin

class MainActivity : AppCompatActivity() {

protected fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

}

fun onProvideAssistContent(outContent: AssistContent) {

super.onProvideAssistContent(outContent)

outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage"))

}

}

Java

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

@Override

public void onProvideAssistContent(AssistContent outContent) {

super.onProvideAssistContent(outContent);

outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage"));

}

}