android 需要说明FLAG_ACTIVITY_NEW_TASK

py49o6xq  于 2022-12-21  发布在  Android
关注(0)|答案(6)|浏览(98)

所以我的问题是:

  • 我启动App1,打开Screen1,然后打开Screen2。
  • 我按Home键,App1留在后台。
  • 我打开App2,使用FLAG_ACTIVITY_NEW_TASK启动App1.Screen1,期望在之前留下的任务中位于App1.Screen2上,但实际上我位于App1.Screen1上,系统调用了onNewIntent()。

当我向后按时,它会再次带出Sceen2和Screen1。我不使用任何其他意图标志或启动模式。
有人能解释一下发生了什么吗?

7vux5j2d

7vux5j2d1#

Android有大量与活动和任务相关的错误。

尽管如此,Google在不同的操作系统版本之间改变了任务的行为,并且没有通知开发人员,这是它最烦人的地方。

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

对于所有那些说文档没有问题的人,试试这个:
1.创建一个包含Activity A(启动Activity)和Activity B(两者都使用默认启动模式)的应用程序。
1.启动应用程序-仅使用活动A创建任务。
1.通过活动A中的按钮,使用FLAG_ACTIVITY_NEW_TASK启动活动B。
1.点击按钮几次,您会看到活动B在任务中创建了多次,这并不像文档所说的那样。
还有更多的场景可以证明文档是糟糕/错误的。

g9icjywg

g9icjywg2#

下面的代码片段有效:

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

tcbh2hod3#

在第3步中,当您打开App2并使用Intent.FLAG_ACTIVITY_NEW_TASK启动App1.Screen1时,您还需要设置Intent.FLAG_ACTIVITY_SINGLE_TOP以使其执行您想要的操作。
另外请注意,如果您是第一次从IDE(IntelliJ、Eclipse)启动应用,或者是在通过market(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

7gs2gvoe

7gs2gvoe4#

这似乎与http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html上的文档一致。
FLAG_ACTIVITY_NEW_TASK等效于launchMode=singleTask,我在其中读到
但是,如果Activity的示例已存在于单独的任务中,则系统会通过调用其onNewIntent()方法将Intent路由到现有示例,而不是创建新示例
在不使用FLAG_ACTIVITY_NEW_TASK的情况下启动活动应该会给予预期的行为。

hmae6n7t

hmae6n7t5#

我们必须使用两个标志,即:
1.第一个月

  1. Intent.FLAG_ACTIVITY_CLEAR_TASK
    第一个标志将简单地向生命周期添加一个活动,就像向堆栈添加一个元素一样。
    第二个标志将简单地从堆栈中移除第一个Activity,以便当用户导航回主屏幕时,他将不能看到Activity,而将仅看到第二个Activity。
yqkkidmi

yqkkidmi6#

FLAG_ACTIVITY_NEW_TasK将您的新Activity放置在一个新的任务堆栈上。
当您启动第一个应用时,您有一个包含A的任务。任务1 = A
单击第二个活动会将B放入任务中。任务1 = AB
当你点击主页时,你会保留任务。任务1 = AB(静止)
打开第二个应用并发送带有新任务标志的Intent A,将创建一个仅带有A的新任务。现在您有两个任务。任务1 = AB,任务2 = A
用back键展开这个排列将得到2A,1B,1A,这就是你所看到的。这是预期的结果。

相关问题