在应用程序中可以有很多活动,最后一次启动的活动保持在堆栈顶部,按下它完成当前活动。我有一系列活动,这里是流程..
如果我们有A,B, C(1),D, C(2) ......活动C(1)和C(2)是两个在导航应用程序时启动了不同的Activity C实例。所以必要的是清除活动C的所有实例,结果应该是当我完成 C(2)时我应该留下这些堆栈的 A,B,d 即可。我该怎么办。
IMP - 我希望将 C(1)保持在堆栈中,直到我完成C(2) 因为我可以使用New Task标志启动C而不是创建这些实例,但这些实例具有不同的UI和工作。
以下方法不利。
首先
@Override
public void onBackPressed(){
super.onBackPressed();
Intent intent = new Intent(C(2).this , D.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
startActivity(intent);
}
这将清除Stack中的所有活动并重新启动Activity
第二
在单例类中保持Activity的跟踪,然后重新启动所需的流,这将消耗有许多活动要启动的时间。
所以我认为应该有一些解决方案使用包管理器或其他解决方案,解决方案表示赞赏
答案 0 :(得分:1)
我不知道在完成C2活动时手动关闭活动C1的方法。
但是你可以通过这种方式处理活动C1 -
1 - 在应用程序类中设置一个标志:
public static boolean IsClosingActivities = false;
在活动C2“完成”之前,C2可以将此值设置为“true”。
并设置“false”,您将为新活动C调用startActivity。(假设稍后可以在应用程序中创建活动C的新实例)。
2 - 在简历的C实现中:
@Override
protected void onResume() {
super.onResume();
if (YourApplication.IsClosingActivities) {
this.finish();
}
}
这样 - 当用户从D-C1导航回来时,他将自己完成并将导航到B.