首页 > 解决方案 > 显示特定活动而不显示应用程序的主要活动

问题描述

我有一个启动/打开由警报触发的活动/窗口的意图。一切正常,但是应用程序的主要活动/窗口在触发时也在上面引用的第一个活动后面打开。因此,当这个活动被解除(在按钮的帮助下)时,应用程序的主窗口将显示在设备上。如何在不打开应用程序的主要活动的情况下打开我的活动?基本上,用户在关闭警报触发的活动时不应该看到应用程序的主要活动。请注意,在打开上述特定活动时,我没有明确调用 Main 活动。这是正常行为,还是我做错了什么?

使用以下几行启动特定活动:

Intent intentRead = new Intent(context, myActivity.class);
intentRead.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intentRead);

标签: android

解决方案


问题

您的代码在新任务中启动新活动:

Intent intentRead = new Intent(context, myActivity.class); 
intentRead.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intentRead);

标志确保新活动获得自己的任务,如果活动已经在历史堆栈的顶部运行,则不会启动活动。

现在,假设您的 MainActivity 已经在后台(最近的应用程序)并且触发了启动 myActivity 的警报。如果不存在 myActivity 的实例,则为其创建第二个任务。否则,如果存在实例,则将删除第二个任务中 myActivity 之上的所有活动。


解决方案

在您的情况下,当您想清除存在的任何其他活动时,您应该使用:

Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK

Intent.FLAG_ACTIVITY_CLEAR_TASK

如果在传递给 Context.startActivity() 的 Intent 中设置,则此标志将导致与该活动相关联的任何现有任务在活动启动之前被清除。也就是说,该活动成为一个空任务的新根,并且所有旧活动都已完成。这只能与 FLAG_ACTIVITY_NEW_TASK 结合使用。


推荐阅读