如何清除Android Stack的活动?

我有一个应用程序与Android中的几个活动,我希望用户能够通过按菜单button注销。 我有这个问题是

答)Android不会让你终止应用程序
B)即使我再次将用户发送到LoginActivity ,他们也可以总是按回来,并返回到之前的活动。

我已经尝试使用以下两个标志启动活动:

 Intent intent = new Intent(this, LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 

我也尝试了他们每一个人自己。

我也试过在startActivity(intent) finish()之后调用finish() ,因为我在另一个StackOverflow问题中读到。

在您的login活动中,重写后退button,以便隐藏您的应用程序而不是完成活动:

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { moveTaskToBack(true); return true; } return super.onKeyDown(keyCode, event); } 

此外,请务必在根活动上设置android:alwaysRetainTaskState =“true”,以便Android在用户不活动30分钟后不会清除您的堆栈(包括login活动)。

然后在成功login时调用finish()。

这应该按位OR'd或者你最终覆盖早期的标志。

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

像这样:

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

按照Wakka 从历史堆栈中移除活动 …


android:noHistory="true"属性添加到AndroidManifest.xml中的<activity>中,如下所示:

 <activity android:name=".MyActivity" android:noHistory="true"> </activity> 

如果您使用Android API 11或更高版本,则可以使用以下代码清除堆栈。

 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

这不会清除你的活动回来堆栈。

即使按照上面所有的答案,当我按下后退button它显示了closures应用程序之前一秒的最后一个活动。

这就是我所做的:

 @Override public void onBackPressed() { Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); } 

现在我的应用程序退出后按下:)没有任何麻烦。

设置Intent.FLAG_ACTIVITY_CLEAR_TOP已经为我工作在一个非常相似的情况下,我没有设置Intent.FLAG_ACTIVITY_NEW_TASK标志。 你有没有试过?

这个工作对我来说:)

 Intent main = new Intent(this, A_Activity.class); main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(main); Intent tool = new Intent(this, B_Activity.class); startActivity(tool); finish(); 

例如,A是我的根源活动

当我打电话给堆栈上的开始活动E时,我有活动A – > B – > C – > D现在有A – > E

我不知道是不是好:)但工程。

 Intent intent = new Intent(this, LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 

写这个并注意: LoginActivity必须首先作为启动器和

如果你写了任何启动模式的标志覆盖其目的,所以删除启动模式,并尝试你一定会得到它

尝试这个

 Intent intent = new Intent(this, MainActivity.class); intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

如果我们使用此代码启动login活动(A):

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

该活动应该在活动的堆栈中,否则这个标志不会有任何影响。

如果我们在login活动(A)中使用了finish(),那么在启动活动(B)(为了避免从B返回到A)之后,活动A(login)将不在栈中。 当login活动具有“noHistory”属性时,完全相同。

所以,我的解决scheme是其他答案的混合:

该代码进入活动B,以避免回到login活动:

 @Override public void onBackPressed() { moveTaskToBack(true); super.onBackPressed(); } 

而这个代码在调用注销函数的活动中进行:

 public static void logout() { Intent intent = new Intent(activity, LoginMain.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); }