Android活动堆栈管理



我有一个" a-b-c-d"活动历史记录。我想杀死活动" C"one_answers" D"并开始一个新的" X"活动,以便新订单变成" A-B-X"。

Intent i = new Intent(D.this,B.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("start_x", true);
startActivity(i);
if (getIntent().getBooleanExtra("start_x", false)) {
    Intent i = new Intent(B.this,X.class);
    startActivity(i);
}

这就是我这样做的方式(我多次使用它(。是否有更简单的方法?

编辑:我忘了写这篇文章:在" D"中,必须按下后键,然后转到" C"活动。

您可以通过两种方式进行此操作。

第一种方式

在androidmanifest.xml中,用于C和D活动添加属性android:noHistory="true"

第二路

在C活动和D活动中,单击时添加标志。

ex:

Intent i = new Intent(C.this, D.class);
i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

对D活动也会做同样的事情...

一个选项是您可以设置活动C&d具有相同的亲和力,可以调用finishaffinity((清除当前任务堆栈具有相同亲和力的活动。有关更多信息,请参阅https://developer.android.com/reference/android/App/activity.html#finishaffinity((

添加到@bharadwaj coundinya

的上述答案中

第三条方法:

我会像这样操纵我的活动堆栈:

从A到B:

//In A
Intent intent = new Intent(this, B.class);
startActivity(intent);

[活动堆栈:A-> B]

从B到C:

//In B
Intent intent = new Intent(this, C.class);
startActivity(intent);

[活动堆栈:a-> b-> c]

从C到D(这次我将使用饰面((;(:

//In C 
Intent intent = new Intent(this, D.class);
startActivity(intent);
finish();

[活动堆栈:A-> B-> D]

然后在d中,如果我的唯一目的是在用户返回时启动x:

//In D
 protected void onPause() {
    super.onPause();
    Intent intent = new Intent(this, X.class);
    startActivity(intent);
    finish();
}

[活动堆栈:A-> B-> X]

现在,如果用户再次从x导航,它将降落在b:

[活动堆栈:A-> B]

最新更新