完成特定活动的所有实例

Vip*_*ahu 6 android instance activity-stack activity-finish

应用程序中可以有许多活动,最后一次启动的活动保持在堆栈顶部,按下它完成当前活动.我有一系列活动,这里是流程..

如果我们有A,B,C(1),D,C(2) ......活动C(1)和C(2)是在导航应用程序时启动的两个不同的活动实例.那么必要的是清除活动C的所有实例,结果应该是当我完成C(2)时我应该留下这些堆栈A,B,D.我该怎么办 .

IMP -I希望将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);
}
Run Code Online (Sandbox Code Playgroud)

这将清除Stack中的所有活动并重新启动Activity

第二

在单例类中保持Activity的跟踪,然后重新启动所需的流,这将消耗有许多活动要启动的时间.

所以我认为应该有一些解决方案使用包管理器或其他解决问题,解决方案是值得赞赏的

Dro*_*man 1

我不知道在完成活动 C2 时手动关闭活动 C1 的方法。

但是,您可以通过这种方式处理恢复中的活动 C1 -

1 - 在您的应用程序类中设置一个标志:

public static boolean IsClosingActivities = false;
Run Code Online (Sandbox Code Playgroud)

在活动 C2 发生“完成”之前,C2 可以将该值设置为“true”。

并在为新活动 C 调用 startActivity 的位置设置“false”。(假设稍后可以在应用程序中创建活动 C 的新实例)。

2 - 在简历上的 C 实现:

    @Override
    protected void onResume() {     
        super.onResume();
        if (YourApplication.IsClosingActivities) {
                this.finish();
        } 
    }
Run Code Online (Sandbox Code Playgroud)

这样,当用户从 D 导航回来时,C1 将自行完成并导航到 B。