8

背景

让我们看下一个场景:

  1. 用户使用具有多个活动的应用 X(如 gmail 应用)。
  2. 在浏览了应用程序 X 之后,他转到了您的应用程序。
  3. 在您的应用程序中,您需要使用意图启动此 X 应用程序,以转到其中的特定活动。
  4. 现在用户去应用 X 上的这个特定活动。
  5. 用户按下后退按钮,希望回到您的应用程序而不是停留在应用程序 X 上。

另一个类似的场景:

  1. 用户在活动之间导航您的应用程序。
  2. 您的应用程序进入后台(例如,使用主页按钮)。
  3. 您的应用程序会显示一个通知,一旦单击,它将打开您应用程序的特定活动。
  4. 用户单击通知并转到您的应用程序的特定活动。
  5. 用户按下后退按钮,希望返回到单击通知之前显示的应用程序,而不是转到上次离开时​​显示的应用程序上的上一个活动。

似乎这两种情况的最后一步都不是默认行为。

这就是为什么我为此目的搜索最佳标志组合的原因。

问题

似乎唯一可以实现我所描述的行为的标志是Intent.FLAG_ACTIVITY_MULTIPLE_TASK(连同Intent.FLAG_ACTIVITY_NEW_TASK)。

但是,根据 android API,不建议正常使用此标志:

除非您正在实现自己的顶级应用程序启动器,否则不要使用此标志。...

因为默认系统不包括图形任务管理,所以您不应该使用此标志,除非您提供某种方式让用户返回到您已启动的任务。

此信息似乎与其他有关意图的描述一样令人困惑。

我见过其他意图标志,例如Intent.FLAG_ACTIVITY_CLEAR_TASK可以达到类似的结果,但是它们具有奇怪的行为和/或它们使用高 API

问题

使用此标志是否安全?有什么好的替代品吗?

使用这个标志有什么危险,使用它的 API 上的描述是什么意思?

4

1 回答 1

3

在您的第一个场景中,如果您的应用程序需要启动另一个应用程序的活动,它可以在与您的应用程序相同的任务中启动此活动。没有理由为此使用任何特殊的 Intent 标志(您不需要FLAG_ACTIVITY_NEW_TASKor FLAG_ACTIVITY_MULTIPLE_TASK)。在场景的第 5 步中,用户将返回到您的应用程序(因为 BACK 只是将他带到当前任务中的上一个活动)。这是标准的默认行为。

在您的第二种情况下,我的第一反应是“这不是标准行为”。这意味着用户可能不会期望能够返回到他们在单击通知之前正在执行的任务。但是,如果您真的想实现这一点,那么我建议您创建一个从通知启动的特殊 Activity,并且此特殊 Activity 应该与taskAffinity您应用程序中的其他 Activity 不同。在这种情况下,当从通知中启动特殊 Activity 时,它不会将您的应用程序的任务带到前台. 它只会创建一个仅包含特殊 Activity 的新任务。当特殊活动显示时,用户可以按返回键,这将使他返回到他在单击通知之前正在处理的任务。

一般来说,您不应该使用FLAG_ACTIVITY_MULTIPLE_TASK. 主要原因是,如果您有多个包含应用程序(或其中的一部分)的任务,用户几乎不可能返回到特定的任务。没有办法提供不同的启动图标或不同的应用程序名称(针对不同的任务)(,这样用户会在“最近的任务”列表中看到多个任务,但无法分辨哪个是哪个。你将很难清理你正在做的事情,你只会制造比你可以处理的更多的问题。使用这个标志有大约一百万个副作用,对于一般应用程序来说,没有必要这样做。

于 2013-11-04T16:12:14.737 回答