android:launchMode和android:documentLaunchMode属性有什么区别?

13
我一直在阅读关于任务、返回栈和概览屏幕的文档,有一件事情让我非常困惑。在阅读了这里的launchMode: http://developer.android.com/guide/components/tasks-and-back-stack.html 和这里的documentLaunchMode: http://developer.android.com/guide/components/recents.html 之后,我无法确定它们有什么区别!
两者都被描述为提供控制启动新Activity在相对于当前任务(启动Activity的任务)中的方式。那么这两种模式有什么不同?附加的-document 是什么意思?
以下是直接指的它们在清单文件中使用的文档: LaunchMode: http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
DocumentLaunchMode: http://developer.android.com/guide/topics/manifest/activity-element.html#dlmode

嗨 @pulp_fiction, 你找到答案了吗?我自己也无法弄清楚它们之间的区别。 - Vijay
4个回答

3

DocumentLaunchMode:

  • 更多与最近任务屏幕相关
  • 允许同一活动的多个文档出现在最近/概述屏幕中
  • 可能的取值:

    1. "intoExisting" - 活动重新使用创建它所用的文档的现有任务。使用此值相当于设置FLAG_ACTIVITY_NEW_DOCUMENT标志,而不设置FLAG_ACTIVITY_MULTIPLE_TASK标志。
    2. "always" - 活动为文档创建一个新任务,即使文档已经打开了。这相当于同时设置FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK标志。
    3. "none" - (默认) - 活动不为该活动创建一个新任务。只有在设置了FLAG_ACTIVITY_NEW_TASK时才会创建新任务。概述屏幕默认情况下将该活动视为单个应用程序任务,并从用户上次调用的任何活动中恢复该任务。
    4. "never" - 即使Intent包含FLAG_ACTIVITY_NEW_DOCUMENT,也不会将此活动启动到新文档中。如果在活动中设置了FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK标志中的任何一个,则设置此项将覆盖其行为,并且概述屏幕将显示单个应用程序任务,该任务从用户上次调用的任何活动中恢复。

launchMode:

  • 更多与返回栈相关
  • 处理活动应该如何启动(创建和关联任务)
  • 可能的取值:

    1. "standard" - (默认) - 系统总是在目标任务中创建该活动的新实例,并将意图路由到它。
    2. "singleTop" - 如果目标任务的顶部已经存在该活动的实例,则系统通过调用其onNewIntent()方法将意图路由到该实例,而不是创建该活动的新实例。
    3. "singleTask" - 系统在新任务的根部创建活动并将意图路由到它。但是,如果该活动的实例已经存在,则系统通过调用其onNewIntent()方法将意图路由到现有实例,而不是创建新实例。
    4. "singleInstance" - 与"singleTask"相同,只是系统不会将任何其他活动启动到保存该实例的任务中。该活动始终是其任务的唯一成员。

逻辑关系: 对于除"none"和"never"(documentLaunchMode)之外的值,必须使用launchMode="standard"定义活动。如果未指定此属性,则使用documentLaunchMode="none"。


3
让我们快速了解一下launchMode的值: standardsingleTop都允许在其他任务中创建多个活动实例。 singleTasksingleInstance都将活动限制为单个实例,作为其任务中的第一个活动。
你发现有什么遗漏吗?这些值都不允许在顶层创建多个活动实例。要么将活动实例启动到其他人的任务中,要么将其限制为单个实例。这就是documentLaunchMode解决的问题。其思想是,如果您的活动具有允许查看文档的意图过滤器,则每个文档-每个数据URI-应该能够在自己的任务中获得自己的活动实例。

0

DocumentLaunchMode 控制应用程序任务在最近任务列表中的显示(导航栏中的第三个按钮)。 就像您在 Chrome 中打开一个网站,您可以打开许多关于此网站的选项卡。


0

Ian Lake 在 AndroidDevSummit 18 上在他的Single Activity演讲中有话要说。

他说现在不要使用launchMode。它们在android 1时代非常棒,但今天可能不是最好的选择。

documentLaunchMode在API 21中添加,现在是正确的方式。他还提到了避免使用hacky解决方案、launchMode标志和任务亲和性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接