【问题标题】:What is the difference between android:launchMode and android:documentLaunchMode attribute?android:launchMode 和 android:documentLaunchMode 属性有什么区别?
【发布时间】:2015-11-16 05:01:49
【问题描述】:

所以我一直在阅读关于Tasks、Back Stack 和Overview Screen 的文档,有一件事情让我非常困惑。在阅读了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 p>

【问题讨论】:

  • 嗨@pulp_fiction,你找到答案了吗?我自己也无法弄清楚其中的区别。

标签: android android-activity android-task


【解决方案1】:

让我们快速看一下launchMode 的值:

standardsingleTop 都允许在其他任务中创建活动的多个实例。

singleTasksingleInstance 都将 Activity 限制为单个实例,作为其任务中的第一个 Activity。

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

【讨论】:

    【解决方案2】:

    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 时才会创建一个新任务。概览屏幕按默认方式处理 Activity:它为应用显示单个任务,该任务从用户上次调用的任何 Activity 恢复。
      4. “从不” - 即使 Intent 包含 FLAG_ACTIVITY_NEW_DOCUMENT,此活动也不会启动到新文档中。设置此项会覆盖 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 标志的行为,如果在 Activity 中设置了这些标志中的任何一个,并且概览屏幕会显示应用的单个任务,该任务会从用户上次调用的任何 Activity 恢复。

    启动模式:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-11-14
          • 2012-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-20
          • 2016-04-29
          相关资源
          最近更新 更多