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



我有一个应用程序,如下所示(主页是启动活动(:

D
C
B
A
Home

我的流程如下:

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

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

我查看了 Intent 标志,例如 CLEAR_TOPNEW_TASK ,但它们似乎都没有做我想要它们做的事情。

我将不胜感激任何帮助!

也许你正在寻找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,因此它也将完成。

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

最新更新