Android 如何从堆栈历史中清除特定活动? 假设我有一个包含A、B、C、D.的活动的应用程序,考虑A已经被启动作为根活动,B已经从A和C启动,B和D已经从C启动了。现在我在活动D中有一个名为“Dead”的按钮。然后,应该从历史堆栈中删除活动B和活动C。按活动D的后退键时,应该显示活动A而不是C。我不知道如何实现这一点。有人能帮我解决这个问题吗?
我不确定您是否可以通过编程直接从历史记录中删除活动,但是如果您使用Android 如何从堆栈历史中清除特定活动? 假设我有一个包含A、B、C、D.的活动的应用程序,考虑A已经被启动作为根活动,B已经从A和C启动,B和D已经从C启动了。现在我在活动D中有一个名为“Dead”的按钮。然后,应该从历史堆栈中删除活动B和活动C。按活动D的后退键时,应该显示活动A而不是C。我不知道如何实现这一点。有人能帮我解决这个问题吗?,android,Android,我不确定您是否可以通过编程直接从历史记录中删除活动,但是如果您使用startActivityForResult()而不是startActivity(),那么根据活动的返回值,您可以立即finish()模拟所需行为的前置活动。通过在所有活动中使用此方法,您可以将此行为级联到活动堆栈,以允许您从活动D转到活动A 我知道这不是你的情况,但是将来如果你在开始活动之前知道你不想让前一个继续,你可以在startActivity()之后立即调用finish() 请参阅中名为“新屏幕的寿命”的部分。我同意@Ri
startActivityForResult()
而不是startActivity()
,那么根据活动的返回值,您可以立即finish()
模拟所需行为的前置活动。通过在所有活动中使用此方法,您可以将此行为级联到活动堆栈,以允许您从活动D转到活动A
我知道这不是你的情况,但是将来如果你在开始活动之前知道你不想让前一个继续,你可以在startActivity()
之后立即调用finish()
请参阅中名为“新屏幕的寿命”的部分。我同意@RivieraKid,但我想到了另一种方法: 当您按下“删除”键时,您将自定义标志设置为true 覆盖后退键事件:
public void onBackPressed() {
if (!remove){
super.onBackPressed();
}else{
Intent goToA = new Intent((this,ActivityA.class););
goToA.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(goToA);
}
}
你认为这是你想要的吗
祝你好运。我想这会满足你的要求。在清单文件中,只需将“noHistory”属性添加到“B”和“C”活动中,您不希望在按下“D”中的“后退”按钮后重新访问这些活动
RivierKid有最好的答案(并且有一个很酷的登录),但是为了完整起见,我想说的是,您还可以设置标志\u ACTIVITY\u NO\u HISTORY标志,以使新启动的活动不会出现在历史记录中。请参见另一种方法是创建一个类来访问活动并关闭它们。
例如:
活动:
- 行动1
- 行动2
- 行动3
public class ActivitiesControl {
public static act1 vAct1 = null;
public static act2 vAct2 = null;
public static act3 vAct3 = null;
}
在设置的每个活动的onCreate中:
ActivitiesControl.vAct1=此
和onDestroy()
ActivitiesControl.vAct1=null
当您要销毁某些活动以将其从stackHistory中删除时,只需调用:
ActivitiesContro.vAct1.finish()
我不知道这是否是最好的方法,但这是对我有效的方法。启动应用程序时。默认情况下,在同一任务中启动所有活动。因此,后面的堆栈如下所示 任务:A->B->C->D 在这种情况下,后堆栈的顶部指向“D” 现在,如果你想再次将最高点指向“A”。 只需声明属性
android:launchMode="singleTask"
对于AndroidManifest.xml中的活动“A”
现在,当您按下活动“D”中的“删除按钮”时
只需像往常一样开始活动。后堆栈已从中清除
活动“B”和“C”,你就可以从活动“a”开始了
记住,这将关闭并从内存中销毁活动D
即使您没有在“D”中显式调用
finish()
,也可能会发生糟糕的内存泄漏EP,存储在这些静态字段中的活动不会被垃圾收集。有关在startActivity()之后立即调用finish()以使当前活动不留在堆栈中的注释非常有用。谢谢
android:launchMode="singleTask"