需要FLAG_ACTIVITY_NEW_TASK澄清

时间:2012-03-19 15:25:33

标签: android android-intent

所以我的问题是:

  • 我启动App1,打开Screen1,然后打开Screen2。
  • 我按Home,将App1留在后台。
  • 我打开App2,使用FLAG_ACTIVITY_NEW_TASK启动App1.Screen1,期望在之前左侧任务中位于App1.Screen2上。而是我在App1.Screen1和系统上调用onNewIntent()。

当我按下它时,它再次带来Sceen2和Screen1。 我不使用任何其他意图标志或启动模式。

有人可以解释发生了什么吗?

7 个答案:

答案 0 :(得分:30)

Android有很多与活动和任务相关的错误。

然而,谷歌改变了操作系统版本之间的任务行为,并没有通知开发人员,这是最烦人的事情。

jakk - 如果您没有在活动(A或B)上设置任何标志,那么您所描述的行为是错误

对于那些说文档没有问题的人,试试这个:

  1. 使用活动A(启动活动)创建一个应用程序& B(两者都有默认的启动模式)。
  2. 启动应用程序 - 仅使用活动A创建任务。
  3. 从活动A的按钮,使用FLAG_ACTIVITY_NEW_TASK启动活动B.
  4. 多次单击该按钮,您将看到在任务中多次创建活动B,这不是文档所说的。
  5. 有更多方案可以证明文档 BAD / WRONG。

答案 1 :(得分:9)

在您打开App2并使用Intent.FLAG_ACTIVITY_NEW_TASK启动App1.Screen1的第3步中,您还需要设置Intent.FLAG_ACTIVITY_SINGLE_TOP以使其达到您想要的效果。这是一个Android错误: - (

还要注意,如果您是第一次从IDE(IntelliJ,Eclipse)启动应用程序,或者通过市场(Google Play)或浏览器下载安装应用程序后,行为也会有点破坏。请参阅How to prevent multiple instances of an activity when it is launched with different intentshttp://code.google.com/p/android/issues/detail?id=26658

答案 2 :(得分:6)

试试这个。它对我有用。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

答案 3 :(得分:1)

这似乎与http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html上的文档一致。

FLAG_ACTIVITY_NEW_TASK相当于launchMode = singleTask,在那里我读了

  

但是,如果活动的实例已经存在于单独的中   任务,系统通过a将意图路由到现有实例   调用它的onNewIntent()方法,而不是创建一个新实例

在没有FLAG_ACTIVITY_NEW_TASK的情况下启动活动应该会给您预期的行为。

答案 4 :(得分:0)

document.querySelectorAll()

答案 5 :(得分:0)

我们必须使用两个标志,即:

  1. Intent.FLAG_ACTIVITY_NEW_TASK
  2. Intent.FLAG_ACTIVITY_CLEAR_TASK

第一个标志只会将活动添加到生命周期中,就像将元素添加到堆栈中一样。

第二个标志只会将第一个活动从堆栈中移除,以便当用户导航到主屏幕上,他将无法看到该活动,而只会看到第二个活动。

答案 6 :(得分:-2)

FLAG_ACTIVITY_NEW_TASK将您的新活动放在新的任务堆栈上。我将把活动称为A和B.

当你启动第一个应用程序时,你只有一个A任务。任务1 = A

单击第二个活动会将B放入任务中。任务1 = AB

单击主页时,您将保留该任务。任务1 = AB(仍然)

打开第二个应用程序并使用新任务标志发送A intent将创建一个只有A的新任务。现在你有两个任务。任务1 = AB,任务2 = A

用后退键解开这种安排会产生2A,1B,1A,这就是你所看到的。这是预期的结果。