如何在Android中控制活动堆栈/清除活动堆栈

时间:2011-08-16 17:47:31

标签: android android-activity android-manifest

我的应用程序如下(Home是启动活动):

D
C
B
A
Home

我的流程如下:

用户从A开始Home活动,该活动流向BC。当用户离开活动C时,我希望销毁ABC。也就是说,如果用户在活动BACK中按D,则会返回Home

用户必须能够通过活动ABC正常控制计划流程。因此,如果他们按下活动C中的后退按钮,则会返回活动B

我查看了CLEAR_TOPNEW_TASK等意图标记,但似乎没有一个像我想要的那样。

我很感激任何帮助!

2 个答案:

答案 0 :(得分:4)

也许您正在寻找FLAG_ACTIVITY_TASK_ON_HOME?它需要API级别11 :(

对于API级别< 11,可以这样做:

启动活动B和C时,请使用startActivityForResult()。启动活动D时,请执行以下操作:

startActivity(D);
setResult(KILL_YOURSELF); //KILL_YOURSELF is some arbitrary int that you use to identify that the other activities should exit
finish(); //finish the activity

这会杀死活动C.然后在活动A和B中,覆盖onActivityResult,如下所示:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(resultCode == KILL_YOURSELF) {
            setResult(KILL_YOURSELF);
            finish();
        }
    }

因此活动B将完成,这反过来将触发A中的onActivityResult,所以它也将完成。

答案 1 :(得分:0)

只需intercept活动D中的后退按钮,并在拦截后退按钮时,转到主页活动。当您前往家庭活动时,您可能/可能不想完成'D'活动。