所以我的问题是:
当我按下它时,它再次带来Sceen2和Screen1。 我不使用任何其他意图标志或启动模式。
有人可以解释发生了什么吗?
答案 0 :(得分:30)
Android有很多与活动和任务相关的错误。
然而,谷歌改变了操作系统版本之间的任务行为,并没有通知开发人员,这是最烦人的事情。
jakk - 如果您没有在活动(A或B)上设置任何标志,那么您所描述的行为是错误。
对于那些说文档没有问题的人,试试这个:
有更多方案可以证明文档 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 intents和http://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)
我们必须使用两个标志,即:
Intent.FLAG_ACTIVITY_NEW_TASK
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,这就是你所看到的。这是预期的结果。