Intent.FLAG_ACTIVITY_CLEAR_TOP没有关闭android中堆栈中的所有活动

时间:2012-08-25 21:04:28

标签: android

我想在开始新活动之前关闭堆栈中的所有活动。

这是我的代码

Intent i=new Intent(first.this,secondsct.class);
                        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        //i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                        //i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        //i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(i);
                        finish();

但这不起作用。我之前尝试过这个但现在没有。我不知道为什么。任何人都可以知道可能是什么原因。

4 个答案:

答案 0 :(得分:7)

我已经尝试过Intent.FLAG_ACTIVITY_CLEAR_TOP但是没有得到合适的解决方案所以最终这对我有帮助

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);

清除所有堆栈并仅运行LoginActivity

答案 1 :(得分:1)

您可以与FLAG_ACTIVITY_CLEAR_TOP一起试用FLAG_ACTIVITY_NEW_TASK

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP)
  

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

答案 2 :(得分:0)

每当你想退出时都使用这个功能。希望这能解决你的问题

 public void exit()
    {
         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.addCategory(Intent.CATEGORY_HOME);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         startActivity(intent);
    }

答案 3 :(得分:0)

我也尝试了所有可能的标志,我就像你一样调用finish()方法。但我找到了一种更好的方法,可以使用finishAffinity()方法来结束之前的所有活动。

第三个答案提出了这个解决方案here。它解决了我的问题。希望它能解决你的问题。