清理android中的活动

清理android中的活动,android,Android,我有四项活动a、b、c、d。活动a是主活动,它调用b、c和d,然后执行一些计算。我知道我可以通过这些活动中的android:noHistory=“true”属性防止活动在我的应用程序中累积。但问题是,如果我在活动c中,当我按下后退按钮时,我想转到b,但如果d完成,我想删除b和c,只显示a。有没有办法做到这一点 将此代码放在您的每个活动中,每次都稍微更改。这样,您就可以覆盖后退按钮的正常功能 @Override public boolean onKeyDown(int keyCod

我有四项活动a、b、c、d。活动a是主活动,它调用b、c和d,然后执行一些计算。我知道我可以通过这些活动中的
android:noHistory=“true”
属性防止活动在我的应用程序中累积。但问题是,如果我在活动c中,当我按下后退按钮时,我想转到b,但如果d完成,我想删除b和c,只显示a。有没有办法做到这一点

将此代码放在您的每个活动中,每次都稍微更改。这样,您就可以覆盖后退按钮的正常功能

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            //start the desired activity
        }

        return super.onKeyDown(keyCode, event);
    }
另外,如果您只支持android 2.0+,那么您可以使用这个

@Override
public void onBackPressed() {
    // start your desired activity here
    return;
}
只要在你的每项活动中加入这两个选项,然后开始正确的活动


要关闭一个特定的活动,请查看本页-

是的,可以通过确保在每个startActivity函数之后使用finish()函数来实现。除了要在最后显示的活动之外

所以。。。下面是它的样子

A中的代码:

startActivity(Intent to start activity B); 
B中的代码:

startActivity(Intent to start activity C); 
Finish();
C代码:

startActivity(Intent to start activity D); 
Finish();
这将确保每当活动D完成时,活动C也会因为完成而完成。由于此C也已完成,活动B中的Finish()将关闭B。由于活动A中没有Finish(),该活动将显示在屏幕上


如果您只想在D完成后才进入活动A,则必须使用startActivityForResult并处理结果,然后使用If有条件地执行B&C中的Finish语句。

您是否已为每个活动中的“后退”按钮编码?否。我没有覆盖后退按钮,因为我认为最好将后退按钮的功能留给android系统。问题不是我想覆盖后退按钮,而是要关闭堆积在堆栈上的n个活动。在开始新活动后,你能用
finish()
完成吗?不。这将简单地关闭所有活动-如果我在活动c中,并且我使用finish(),当我想关闭活动b时,它将关闭b,只有在活动d已完成时,它才会关闭c。我想目前我最好的选择是在我的活动中使用startActivityForResult()。在他链接的其他问题/答案之后,请参见mdelolmo的答案,而不是公认的答案。它显示了如何清除堆栈。:)