Intent.FLAG_ACTIVITY_CLEAR_TOP在Android中不起作用
作者:互联网
嗨,我正在开发android应用程序,其中有活动流,例如A-> B-> C.
因此,我的意图是,一旦B打开活动C,就同时关闭A和B.为此,我尝试使用2个标志:
Intent.FLAG_ACTIVITY_CLEAR_TOP和Intent.FLAG_ACTIVITY_SINGLE_TOP
但是当我点击
后面显示了活动B和活动A.我开始这样的活动
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
我不知道为什么它不起作用,我做错什么了吗?需要帮忙.谢谢.
解决方法:
public static final int FLAG_ACTIVITY_CLEAR_TOP
如果已设置,并且正在启动的活动已在当前任务中运行,那么与其启动该活动的新实例,不如关闭该活动之上的所有其他活动,并将此Intent传递给(现在顶部)将旧活动作为新的Intent.
例如,考虑一个由以下活动组成的任务:A,B,C,D.如果D调用具有解析为活动B组件的Intent的startActivity(),则C和D将完成,并且B接收给定的Intent ,导致堆栈现在为:A,B.
在上面的示例中,活动B的当前正在运行的实例将通过onNewIntent()方法接收您在此处开始的新意图,或者自行完成并使用新意图重新启动.如果已将其启动模式声明为“多个”(默认),并且您未将FLAG_ACTIVITY_SINGLE_TOP设置为相同的意图,则它将完成并重新创建;否则,它将重新创建.对于所有其他启动模式,或者如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此Intent将被传递到当前实例的onNewIntent().
此启动模式还可以与FLAG_ACTIVITY_NEW_TASK结合使用,以达到良好的效果:如果用于启动任务的根活动,它将把该任务的任何当前正在运行的实例置于前台,然后将其清除为根状态.例如,当从通知管理器启动活动时,此功能特别有用.
Intent a = new Intent(this,A.class);
a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(a);
有关更多信息,请查看here
标签:activity-stack,flags,android 来源: https://codeday.me/bug/20191122/2061423.html