Android 活动后堆叠-保留第一个切缝活动并清除其他活动

Android 活动后堆叠-保留第一个切缝活动并清除其他活动,android,android-intent,back-stack,Android,Android Intent,Back Stack,情况是这样的。A是应用程序启动的第一个活动 给定A->B,如果我调用活动F,它将变成A->F清除B 但是,有些情况下,比如从A->B->C调用F。它应该再次解析为A->F。因此,我相信标记活动历史记录不会起作用 编辑: 澄清 结构会是这样的, A(发射) B D F(第二级,A->B、A->D或A->F) C E(第三级,A->B->C或A->D->E) 我如何才能做到这一点?当您在A->B处并且想要启动F时,在B上调用finish(),然后启动Tactivity(F)。然后,你的后退将是A->

情况是这样的。A是应用程序启动的第一个活动

给定A->B,如果我调用活动F,它将变成A->F清除B

但是,有些情况下,比如从A->B->C调用F。它应该再次解析为A->F。因此,我相信标记活动历史记录不会起作用

编辑: 澄清 结构会是这样的,

A(发射)

B D F(第二级,A->B、A->D或A->F)

C E(第三级,A->B->C或A->D->E)


我如何才能做到这一点?

当您在A->B处并且想要启动F时,在B上调用finish(),然后启动Tactivity(F)。然后,你的后退将是A->F

如果堆栈较大(A->B->C),并且希望它变成A->F,则可以使用Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK将任务返回到A,然后从根目录调用所需的任何内容

像这样的

class A {
    public void onStart(){
        Intent intent = getIntent();
        if(intent != null && intent.contains(EXTRA_INVOKE)){
            startActivity(Class.forName(intent.getExtra(EXTRA_INVOKE)));
        }
    }

    public static void restoreStackTo(Context context, Class<? extends Activity> clazz){
        Intent intent = new Intent(context, A.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
        intent.putExtra(EXTRA_INVOKE, clazz.toString());
        startActivity(intent);
    }
}

从C开始,当堆栈是,例如,A->B->C。

在第二个示例中,在C中按back返回到B还是A?它将返回到B。因此,是否只有F清除堆栈并且所有其他活动正常运行的情况?我编辑了这个问题以澄清我的问题。基本上,我不想清除启动器活动A。后退按钮将在所有活动中正常工作。我想我真的不明白问题是什么。如果是启动活动,则活动A将不会被清除,除非您在活动A中按下后退按钮。
A.restoreStackTo(F.class)