使用Intent.FLAG_ACTIVITY_MULTIPLE_TASK是否安全?

and*_*per 7 android android-intent android-notifications android-activity

背景

让我们来看下一个场景:

  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的描述含义是什么?

Dav*_*ser 4

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

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

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