清除Android中的所有活动

3

我有4个活动:1.主页,2.B,3.C和4.D。每当我从活动D开始Home时,我希望结束所有其他活动。我使用了这段代码,但是当我从主页按回退按钮时,它将我带回到上一个活动。我在这里做错了什么。

    Intent intent = new Intent(getApplicationContext(), Home.class);        
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent)

每次调用该类时,请调用finish()方法。 - RAAAAM
当从活动D返回时,您是否想关闭所有活动? - Shailendra Madda
可能是https://dev59.com/iXA75IYBdhLWcg3w9-Ox#9580057的重复问题。 - Infinite Recursion
问题是当我从主页按返回按钮时,如果添加android:nohistroy="true",这会结束所有活动吗? - user2534313
在启动新活动时,请完成先前的活动。请查看此帖子https://dev59.com/_WLVa4cB1Zd3GeqPvl1c#10028968 - vinay
3个回答

2
你可以尝试这个:
Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

注意:根据FLAG_ACTIVITY_CLEAR_TOP文档所述:
此启动模式也可以与FLAG_ACTIVITY_NEW_TASK一起使用,以便在启动任务的根活动时将任何当前正在运行的该任务实例置于前台,然后将其清除为其根状态。例如,在从通知管理器启动活动时,这非常有用。

感谢您澄清这个问题。 - user2534313
如果您正在同一任务中从另一个活动开始该活动(这是通常情况),则使用“FLAG_ACTIVIY_NEW_TASK”是无用的。 - David Wasser

1
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

这只适用于仍在活动堆栈中的活动。我相信你在前往B时会结束Home Activity。所以CLEARTOP不起作用。 现在尝试像这样做。
您需要使用"D"的意图设置一个Extra到Home。然后您需要在Home中检查Intent额外内容,如果匹配则调用finish()。
    Intent intent = new Intent(contxt, Home.class);
    intent.putExtra("urString",defaultvalue);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    // Checking the intent extra at "HOME"
    if(getIntent().hasExtra("urString")){
      // manage your own way            
      finish();
    }

-1
在 manifest.xml 文件中为所有活动设置 android:nohistory="true"。

这是一个糟糕的回答。你显然不理解活动是如何工作的。noHistory标志只在非常特殊的情况下使用。 - David Wasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接