6

应用程序中可能有很多活动,最后启动的活动保持在堆栈顶部,并在按下它时完成当前活动。我有一个活动序列,这是流程..

如果我们有 A,B, C(1) ,D, C(2) ... Activity 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);
}

这将从堆栈中清除所有活动并重新启动活动

第二

跟踪单例类中的 Activity,然后重新启动所需的流程,这将如何消耗有许多要启动的 Activity 的时间。

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

4

1 回答 1

1

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

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

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

public static boolean IsClosingActivities = false;

这个值可以在活动 C2 发生“完成”之前由 C2 设置为“真”。

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

2 - 在 C 实现 on resume :

    @Override
    protected void onResume() {     
        super.onResume();
        if (YourApplication.IsClosingActivities) {
                this.finish();
        } 
    }

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

于 2013-06-05T13:01:20.307 回答