原文地址:Overview Screen

  • 一、前言
  • 二、向overview screen添加task
    • 2.1 使用intent的flag添加task
    • 2.2 使用activity属性添加task
  • 三、移除task
    • 3.1 使用AppTask移除task
    • 3.2 保存已结束的task

一、前言

主页(overview screen)也叫recent screen、recent task list、recent apps,是一个系统级UI,能够列举最近访问的activity和task。用户可以在这个UI中选择或者移除task。从Android 5.0(API 21)开始,Android支持同一个activity的不同实例在overview screen中显示为多个task。例如,Google Drive可以有一个task显示多个Google documents,而每个document也可以在overview screen中显示为一个task,如图1(个人理解:document是某个activity在overview screen的UI显示,它可以独占一个task单独显示,也可以有多个document显示在同一task中)。

通常,由系统定义你的task跟activity如何显示在overview screen上即可,你不需要改变这些行为。当然,你也可以自定义activity怎样和什么时候显示在overview screen上:使用ActivityManager.AppTask可以管理task,使用intent的flag可以指定什么时候activity加入overview screen或者从overview screen移除(在manifest文件中指定<activity>的属性也可以)。


二、向overview screen添加task

通过intent添加flag可以很好的控制什么时候/怎样在overview screen打开或者重新打开document。通过<activity>添加属性,你可以控制是在新的task打开document还是在已存在的task打开document。

2.1 使用intent的flag添加task

通过ActivityManager.AppTask的startActivity()方法,并传入一个intent(在此intent中通过addFlags()方法添加FLAG_ACTIVITY_NEW_DOCUMENT),可以让系统在overview screen中将你的activity视为一个新的task。

注意:FLAG_ACTIVITY_NEW_DOCUMENT替代了FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET,后者从Android 5.0(API 21)开始废弃

如果你在新建document时加入了FLAG_ACTIVITY_MULTIPLE_TASK,那么系统会新建一个task,并将目标activity作为根activity。此flag可以让同一个document在多个task中打开。下面是main activity的一些代码:

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的前提是,目标activity在manifest中指定的launchMode为standard(android:launchMode=”standard”)

在上面的示例中,当main activity启动新activity时,系统会在已存在的task中寻找符合intent指定的组件名称(component name)和intent数据的activity。如果没有找到这样的task,或者intent中包含FLAG_ACTIVITY_MULTIPLE_TASK,那么系统会新建一个task并将目标activity作为此task根activity;如果找到了这样的task,那么系统会将此task放到前台,并将新的intent传递给目标activity的onNewIntent()方法。新的activity得到此intent后会在overview screen中新建一个document,代码如下:

@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 activityis reused to create a new document.*/setDocumentCounterText(R.string.reusing_document_counter);
}

2.2 使用activity属性添加task

activity可以在manifest文件的<activity>标签下添加属性:android:documentLaunchMode,以控制activity的document。这个属性有四个值:

  • intoExisting

    activity会重用存在的task放置document。相当于添加了FLAG_ACTIVITY_NEW_DOCUMENT,且没有添加FLAG_ACTIVITY_MULTIPLE_TASK

  • always

    activity为document新建一个task,即使这个document已经打开了。相当于添加了FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK

  • none

    activity不会为document新建task。overview screen会将此activity视为默认状态:为此应用显示单独的task,该任务将从用户上次调用的任意Activity开始继续执行

  • never

    activity不会为document新建task。这个值对应的逻辑重写了FLAG_ACTIVITY_NEW_DOCUMENT与FLAG_ACTIVITY_MULTIPLE_TASK,如果intent中有这两个flag(或之一),那么overview screen会为此应用显示单独的task,该任务将从用户上次调用的任意Activity开始继续执行

注意:“intoExisting”与“always”要求activity的launchMode必须为standard。如果documentLaunchMode未指定,会默认使用“none”


三、移除task

默认情况下,document对应的activity结束时,会自动从overview screen移除。你可以通过在ActivityManager.AppTask类添加intent的flag或使用<activity>属性修改默认行为。

<activity>的android:excludeFromRecents属性设置为true,可以随时将task从overview screen完全移除。

设置<activity>的android:maxRecents可以限制你的应用能在overview screen显示的task的最大数量。默认为16。当task数量达到最大数量时,最早使用的task将会从overview screen移除。android:maxRecents可以设置的最大值为50(小内存设备中是25);小于1的值无效。

3.1 使用AppTask移除task

在新建task的activity中,你可以通过finishAndRemoveTask()方法,移除task和task中所有的activity。

public void onRemoveFromRecents(View view) {// The document is no longer needed; remove its task.finishAndRemoveTask();
}

注意:finishAndRemoveTask()方法重写了FLAG_ACTIVITY_RETAIN_IN_RECENTS(此flag在后面会讲到)

3.2 保存已结束的task

如果你想要在activity被结束后仍然将task保持在overview screen,可以在启动此activity的intent中通过addFlags()添加FLAG_ACTIVITY_RETAIN_IN_RECENTS。

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;
}

<activity>的android:autoRemoveFromRecents属性设置为false可以达到同样的效果(document activity的默认值为true,regular activity的默认值为false)。这个属性会重写FLAG_ACTIVITY_RETAIN_IN_RECENTS。

Overview Screen-Android 6.0开发者文档相关推荐

  1. Android 7.0 开发者版本

    Android 7.0 Nougat 为用户和开发者引入多种新功能.本文重点介绍面向开发者的新功能. 请务必查阅 Android 7.0 行为变更以了解平台变更可能影响您的应用的领域. 要详细了解 A ...

  2. layuiAdmin pro v1.x 【单页版】开发者文档

    layuiAdmin pro v1.x [单页版]开发者文档 layuiAdmin pro (单页版)是完全基于 layui 架构而成的后台管理模板系统,可以更轻松地实现前后端分离,它是 mvc 的简 ...

  3. layuiAdmin std v1.x 【iframe版】开发者文档

    layuiAdmin pro v1.x [单页版]开发者文档 layuiAdmin.std(iframe 版) 是完全基于 layui 架构而成的通用型后台管理模板系统,采用传统的 iframe 多页 ...

  4. Android加载PDF文档

    ​前言 最近项目上有一个需求,需要在Android端加载显示pdf文档,因为没有相关的经验,在刚接到需求的时候,第一想法就是打开程序员的第二大脑进行搜索,搜索结果还是蛮理想的,了解到了MuPDF,它支 ...

  5. apple开发者文档关于KVC和KVO文档的一些渣翻——这里是原地址

    apple开发者文档关于KVC和KVO文档的一些渣翻--这里是原地址 Key-Value Coding Programming Guide KVC编程介绍 介绍 本文档用来描述NSKeyValueCo ...

  6. 【LayIM】开发者文档

    webim[LayIM]开发者文档 在WebIM似乎已被打入冷宫的今天,LayIM正试图重新为网页带来一些社交想象.作为一款Web即时通讯前端解决方案(服务端需自写),LayIM提供了全方位接口支撑, ...

  7. 推特开发者账号申请失败【推特开发者文档系列7】——通过API接口发布、检索推文

    文章转自:https://www.jianshu.com/p/2c208994ff9a 本系列是对推特开发者文档进行的翻译,以便帮助开发人员使用API接口,难免有些地方存在不足,还请谅解. 关于如何获 ...

  8. java 微信转账 ca_error_【微信支付】企业付款开发者文档

    [微信支付]企业付款开发者文档 2018-11-24 简介 企业付款业务是基于微信支付商户平台的资金管理能力,为了协助商户方便地实现企业向个人付款,针对部分有开发能力的商户,提供通过API完成企业付款 ...

  9. Word处理控件Aspose.Words功能演示:使用 Android 库将 Word 文档转换为 PDF

    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word.此 ...

最新文章

  1. Ubuntu 系统通过终端打开AndroidStudio工具
  2. 《走进SAP(第2版)》——第2章 企业软件的SAP之路2.1 企业资源计划(ERP)...
  3. 每日一皮:千万别和杠精一般见识...
  4. python能在生活中做什么-一行Python能实现什么丧心病狂的功能?
  5. Verilog二选一数据选择器
  6. Nginx 模块开发高级篇
  7. knn算法python代码_在python中使用KNN算法处理缺失的数据
  8. PPT怎么设置html颜色代码,PPT怎么设置表格边框颜色 PPT设置表格边框颜色教程
  9. 【杂七杂八】虚拟机win中 腾讯会议视频黑屏
  10. 野火指南者ESP8266模块学习
  11. linux huge模式设置,Linux HugePages 配置步骤
  12. 一个全国500强企业的老板是如何关爱员工的
  13. 百度之星-列变位法解密
  14. 2021 年第十三届四川省 ACM-ICPC 大学生程序设计竞赛(A/B/D/H/E/K/M/L)
  15. 荧光猝灭剂BHQ-1 acid/NHS/azide/amine/BHQ染料染料
  16. 中国移动oa办公系统
  17. 秒杀系统(SecKillGoods)
  18. 为Android Studio配置JDK1.8
  19. PhotoZoom Pro 7怎么进行参数设置
  20. 无线传感器网络(特点,挑战和应用)

热门文章

  1. 基于Arduino的显示测量环境数据设计
  2. PTA 7-222 sdut-C语言实验-N^3问题
  3. PHP高级工程师必备技术合集
  4. 万方数据库高级索引方式
  5. 美图商业化2.0:探寻多元增长曲线
  6. python数据科学常国珍_《PYTHON数据科学:全栈技术详解》常国珍//赵仁乾//张秋剑著【摘要 书评 在线阅读】-苏宁易购图书...
  7. 看医疗行业如何建立信息化战略决策
  8. coreldraw凸起字符_CorelDRAW中如何插入特殊符号字体
  9. 计算机网络体系结构整理-第二单元IP技术
  10. android 仿苹果 小组件,安卓仿ios14桌面小部件