使用Intent.FLAG_ACTIVITY_MULTIPLE_TASK是否安全?

时间:2013-11-04 15:25:50

标签: android android-activity android-notifications android-intent

背景

让我们来看下一个场景:

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

    1. 用户在活动之间浏览您的应用。
    2. 您的应用程序转到后台(例如,使用主页按钮)。
    3. 您的应用会显示一条通知,一旦点击,它就会打开您应用的特定活动。
    4. 用户点击通知并转到您应用的特定活动。
    5. 用户按下后退按钮,希望返回到点击通知之前显示的应用,而不是转到上次离开时​​显示的应用上的上一个活动。
    6. 似乎两种方案的最后一步都不是默认行为。

      这就是为什么我为此目的搜索了最好的标志组合。

      问题

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

      然而,根据android API,不建议将此标志用于正常使用:

        

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

           

      因为默认系统不包括   图形任务管理,除非你,否则你不应该使用这个标志   为用户提供某种方式返回到您拥有的任务   启动。

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

      我见过其他一些意图标志,比如Intent.FLAG_ACTIVITY_CLEAR_TASK可以获得类似的结果,但它们有奇怪的行为和/或它们使用高API

      问题

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

      使用此标志有什么危险,使用它的API的描述含义是什么?

1 个答案:

答案 0 :(得分:2)

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

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

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