显示特定活动而不显示应用程序的主要活动

时间:2018-09-16 01:14:40

标签: android

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

通过以下行启动特定活动:

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

2 个答案:

答案 0 :(得分:1)

问题

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

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。

答案 1 :(得分:0)

假设first活动是由您的主要活动开始的,那么您是否可以在开始first活动之后完成主要活动。我的意思是这样:

startActivity(MainActivity.this, FirstActivity.class);
MainActivity.this.finish();