从Android应用堆栈中手动删除活动

Riz*_*van 5 java stack android

我一直在研究Android Native App,我想做的是:

Activities - A -> B -> C  Then  A-> B -> C -> C  . 
Run Code Online (Sandbox Code Playgroud)

从C活动,如果它再次指向C,那么我想手动从堆栈中删除C,B.在我的背上它应该只移动到A.

我试过finish(),但问题是:

Activities - A -> B ->  C  Then  A-> B -> C -> C  on finish A -> B -> C  required state A-> C .
Run Code Online (Sandbox Code Playgroud)

有谁知道如何捕获堆栈中的所有活动并从堆栈中删除特定的活动?

bla*_*lah 6

在Activity C中,覆盖onBackPressed并添加如下内容:

@Override
public void onBackPressed() {
    if (shouldGoBackToA) {  // There are various ways this could be set
        Intent intent = new Intent(this, AActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    } else {
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

FLAG_ACTIVITY_CLEAR_TOP将导致它从堆栈下移到A Activity的现有副本而不是开始新的副本. 来自文档:

public static final int FLAG_ACTIVITY_CLEAR_TOP
如果设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并且此Intent将被传递到(现在在最前面)作为新意图的旧活动.


小智 0

在调用 Intent 时,会传递一个名为 actvity clear top 的标志,如下所示:

Intent newIntent=new Intent(this,MainActivity.class);
        newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(newIntent);
Run Code Online (Sandbox Code Playgroud)

  • 如果我添加清除顶部,那么从 C 活动中我将不会得到 A 活动。 (3认同)