如何正确删除所有活动堆栈?

时间:2012-09-19 10:07:32

标签: android android-activity stack

Activity A -> Activity B -> Activity C -> Activity D。在活动D中按回来应该将用户导出应用程序,而Back应该对活动C,B和A正常工作,即C -> back -> B -> back A -> back -> exit

我尝试使用不同组合的Activity.FLAG_ACITIVITY_CLEAR_TOP,等设置标志。似乎没什么用。最低API级别7。

5 个答案:

答案 0 :(得分:2)

#1 Pressing back in Activity D should navigate user out of the application

在ActivityD中,您可以覆盖onBackPressed或onKeyDown方法,然后使用带有Exit标志的标志FLAG_ACTIVITY_CLEAR_TOP启动ActivityA(通过putExtra方法)。在ActivityA中,如果Exit标志设置为true,则可以获取Exit标志值并调用finish()。

在活动A的onCreate方法中,您需要做的是

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}

在ActivityD的onBackPressed或onKeyPressed方法中,

intent = (this, ActivityA.class);   
   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   intent.putExtra("EXIT", true);
   startActivity(intent); 

#2 Exit from ActivityA

您只需在onBackPressed或onKeyPressed上调用finish()方法即可。

答案 1 :(得分:0)

Android活动存储在活动堆栈中。回到以前的活动可能意味着两件事。

  1. 您使用startActivityForResult从另一个活动中打开了新活动。在这种情况下,您只需从代码中调用finishActivity()函数,它就会将您带回到之前的活动。

  2. 跟踪活动堆栈。每当您使用intent启动新活动时,您都可以指定一个意图标记,如FLAG_ACTIVITY_REORDER_TO_FRONT或FLAG_ACTIVITY_PREVIOUS_IS_TOP。您可以使用它在应用程序中的活动之间进行随机播放。虽然没有多用它们。看看旗帜here

答案 2 :(得分:0)

您是否尝试覆盖活动D中BACK按钮的功能?我非常确定这与您的需求非常相关:Override back button to act like home button

了解Android活动生命周期。

答案 3 :(得分:0)

  1. “在活动D中按回来应该将用户导出应用程序”

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                moveTaskToBack(true);           
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    
  2. 这是操作系统的正常行为,您无需为此做任何特殊操作。

答案 4 :(得分:-1)

在启动其他活动之前,只需在您的活动中调用finish方法。

this.finish();
startActivity(new_activity_intent);