Android活动堆栈管理

Android活动堆栈管理,android,android-activity,stack,Android,Android Activity,Stack,我有“a-b-c-d”活动记录。 我想取消活动“c”和“d”,并开始一个新的“x”活动,这样新的订单就变成了“a-b-x” 我就是这样做的(我经常使用它)有更简单的方法吗? 编辑:我忘了写这个:在“d”中按后退键并转到“c”活动是必要的。你可以用两种方法来完成 第一条路 在AndroidManifest.xml中,为C和D活动添加属性android:noHistory=“true” 第二种方式 在C活动和D活动中,单击添加标志时 Ex: Intent i = new Intent(C.this,

我有“a-b-c-d”活动记录。 我想取消活动“c”和“d”,并开始一个新的“x”活动,这样新的订单就变成了“a-b-x”

我就是这样做的(我经常使用它)有更简单的方法吗?


编辑:我忘了写这个:在“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()从当前任务堆栈中清除具有相同关联性的活动。欲了解更多信息,请参阅@BHARADWAJ Condinya上述答案中添加的

第三种方式:

我将如下操作我的活动堆栈:

从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(这次我将使用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]


我忘了写对不起。在dI忘记写抱歉时,有必要按back键并转到c活动。在dso中,有必要按back键并转到c活动,从a b c d返回c,然后按back键返回x对吗?然后在c中检查条件并通过完成自检启动x,这样,c就不会在堆栈中,当用户从x返回时,它可能会落在B上。您所做的是最简单、最直接的方法。您还可以将
Intent.FLAG\u ACTIVITY\u SINGLE\u TOP
添加到用于从
B
启动
D
Intent
中,这将重用
B
的现有实例。然后,您应该覆盖
B
中的
onNewIntent()
,并检查额外的和(可选)从那里开始
X
//In C 
Intent intent = new Intent(this, D.class);
startActivity(intent);
finish();
//In D
 protected void onPause() {
    super.onPause();
    Intent intent = new Intent(this, X.class);
    startActivity(intent);
    finish();
}