我有一个Intent,它可以启动/打开由警报触发的活动/窗口。一切正常,但是在触发时,应用程序的主活动/窗口也在上面引用的第一个活动之后打开。因此,当取消该活动(借助于按钮)时,应用程序的主窗口将显示在设备上。如何在不打开应用程序主活动的情况下打开我的活动?基本上,在关闭由警报触发的活动时,用户不会看到应用程序的主要活动。请注意,打开上述特定活动后,我没有明确调用Main活动。这是正常行为,还是我做错了事?
通过以下行启动特定活动:
Intent intentRead = new Intent(context, myActivity.class);
intentRead.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intentRead);
答案 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();