启动活动的意图 - 但不将其置于前台

37

描述:

  • 活动 A 可见(或在后台)。
  • 使用带有有价值的额外信息的广播接收意图 I,然后将这些额外信息传递给新的意图 I2,该意图将用于启动活动 A
  • 结果:如果活动在后台,则不要将活动带到前台。

代码:

Intent I2= new Intent(context, MyActivity.class); 
I2.putExtra(..
I2.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); // | Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(I2);

注意:我没有在清单文件中添加任何“android:taskAffinity”属性.. 我想你应该知道


2
为什么你想要启动一个Activity,但又不希望它在前台显示呢?你想要做什么呢? - ngesh
所以我更新了它:如果活动在后台,请勿将活动带到前台! - pulancheck1988
不要使用FLAG_ACTIVITY_MULTIPLE_TASK!如果最终启动多个任务,您将很难管理它们。这是一个你不想打开的潘多拉盒子! - David Wasser
3个回答

15

如果你想让你的活动在后台运行,在活动的oncreate方法中添加以下代码:

moveTaskToBack(true);

如何使其适用于FLAG_ACTIVITY_MULTIPLE_TASK?(2个选项卡按钮A和B,但应该通过任何按钮的任务隐藏应用程序,而不是将按钮B返回到按钮A的单向操作)(FLAG_ACTIVITY_TASK_ON_HOME也是单向操作。) - 林果皞
1
[更新] 我可以使用全局引用来处理第一个活动,并将其设置为 act.moveTaskToBack(true); - 林果皞
1
这应该是一个答案。@林果皞。我现在会尝试并查看它是否仍然有效。 - Lorenzo Battilocchi
2
这会导致白屏显示很短的时间然后隐藏它,难道没有任何解决方案可以完全在后台打开活动而不显示任何内容吗? - highjump

7
您可以在您的 `onCreate()` 方法中使用这行代码:
moveTaskToBack(true);

你能告诉我如何在调用 moveTaskToBack(true); 后重新启动活动吗? 我使用了 Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK,但它并没有重新启动活动,而是创建了一个新的.. 注意** 我多次实例化了同一个活动。 - medo

5
您不希望在后台启动一个Activity。有更好的方法可以实现您想要的功能。例如,您可以让您的Activity注册接收广播Intent。即使在后台,它也会收到调用onReceive()的通知。您可以通过在onPause()中将变量设置为true,在onResume()中将其设置为false来确定您的Activity是否在后台运行。然后在onReceive()中,如果该变量为true,则表示您的应用正在后台运行。

1
这里的问题不在于如何检查活动的当前状态,而在于如何防止在后台发送Intent时将应用程序带回。 - Damon Yuan
@DamonYuan 你不能这样做。如果你启动一个针对“Activity”的“Intent”,那么托管该“Activity”的任务将被带到前台。这就是它的工作方式。你无法绕过这个问题。但你可以使用不同的机制来获得你想要的行为(例如“BroadcastReceiver”),它不会导致托管任务被带到前台。 - David Wasser
那是我的理解。所以你之前给出的答案不是这个问题的正确答案,但你上面的评论是正确的。 - Damon Yuan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接