当前位置: 代码迷 >> Android >> 显示特定活动而不显示应用程序的主要活动
  详细解决方案

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

热度:69   发布时间:2023-08-04 12:39:12.0

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

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

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

问题

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

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

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

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

startActivity(MainActivity.this, FirstActivity.class);
MainActivity.this.finish();
  相关解决方案