8

所以我一直在阅读关于任务、返回堆栈和概览屏幕的文档,有一件事让我非常困惑。在这里阅读后:http launchMode: //developer.android.com/guide/components/tasks-and-back-stack.html然后在documentLaunchMode这里:http: //developer.android.com/guide/components/recents.html我无法分辨它们有何不同!

两者都被描述为提供方法来控制相对于当前任务(启动活动的任务)的任务中新活动的启动。那么这两种模式有什么不同呢?-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

4

4 回答 4

2

让我们快速看一下这些launchMode值:

standard并且singleTop两者都允许在其他任务中创建活动的多个实例。

singleTask并且singleInstance两者都将活动限制为单个实例,作为其任务中的第一个活动。

你似乎缺少什么?这些值都不允许在顶层创建活动的多个实例。您可以将您的活动实例启动到其他人的任务中,或者将其限制为单个实例。这些值都不允许创建多个任务来托管您的活动。这种疏忽就是要documentLaunchMode解决的问题。这个想法是,如果您的活动有一个允许它查看文档的意图过滤器,那么这些文档中的每一个——每个数据 uri——都应该能够在自己的任务中获取自己的活动实例。

于 2017-11-10T18:17:15.867 回答
1

文档启动模式:

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

    1. "intoExisting" - 活动重用文档的现有任务(创建它的任务)。使用此值与设置 FLAG_ACTIVITY_NEW_DOCUMENT 标志相同,但不设置 FLAG_ACTIVITY_MULTIPLE_TASK 标志。
    2. "always" - 活动为文档创建一个新任务,即使文档已经打开。这与设置 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 标志相同。
    3. “无” - (默认) - 活动不为活动创建新任务。这仅在设置 FLAG_ACTIVITY_NEW_TASK 时创建一个新任务。概览屏幕默认处理活动:它显示应用程序的单个任务,该任务从用户上次调用的任何活动恢复。
    4. “从不” - 即使 Intent 包含 FLAG_ACTIVITY_NEW_DOCUMENT,此活动也不会启动到新文档中。设置此项会覆盖 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 标志的行为,如果在活动中设置了这些标志中的任何一个,并且概览屏幕会显示应用程序的单个任务,该任务会从用户上次调用的任何活动恢复。

启动模式:

  • 更多与后栈相关
  • 处理应如何启动活动(创建并与任务关联)
  • 可能的值:

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

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

于 2016-08-15T05:15:47.110 回答
0

DocumentLaunchMode 是控制应用程序任务在最近任务列表中的显示(引导栏中的第三个按钮)。就像你在 Chrome 中打开一个网站一样,你可以打开许多关于这个网站的标签。

于 2015-08-22T09:10:57.613 回答
0

在 AndroidDevSummit 18 期间,Ian Lake 在他的Single Activity演讲中确实有话要说。

他说现在不要使用启动模式。他们在 android 1 中很棒。今天他们可能不是最好的。

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

于 2018-11-11T02:48:23.967 回答