“最近”屏幕
“最近使用的应用”屏幕,也称为“概览”屏幕,表示近期任务
或“最近用过的应用”屏幕,这是系统级界面,其中会列出
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"));
}
}
最新发布
-
纵横世界:2025年4月14日全球跨服竞技盛典开启!
2025-04-14 09:10:44 -
windows10临时文件夹在哪里 win10临时目录在哪里
2025-11-20 05:39:21 -
从零开始的异世界生活无限:冒险启程,探索无限可能
2025-05-08 19:25:58 -
曙光之境·破晓之光庆典:2025年5月19日全服跨时空探索挑战活动
2025-05-19 22:29:02 -
惊天动地2--永恒:启航新征程,探索无尽冒险!
2025-05-06 01:05:23 -
湮灭线:终焉重启计划——跨时空裂隙的生存者竞逐与文明重构之战
2025-04-24 19:17:33 -
《大掌门》许愿心得以及真气的获取技巧分享
2025-12-07 14:49:18 -
公会大师:巅峰对决挑战赛
2025-06-28 20:15:34 -
金箍棒OL暑期狂欢节:齐天大圣归来!
2025-07-07 12:02:03 -
战龙卸甲:2025年春季巨龙觉醒之战,赢取史诗级装备与荣耀!
2025-04-29 03:34:01