2

正如问题标题所说 - 我需要知道“删除”/销毁/完成位于堆栈中间某处且当前处于暂停模式(不是特定实例 - 而是特定派生类)的活动的最佳方法是什么。

例如:
如果堆栈的当前状态如下所示:

ActivityD   <-- top of the stack, currently forground
ActivityC
ActivityA
ActivityC
ActivityA

“清除”所有 ActivityC 实例的请求将导致堆栈如下所示:

ActivityD  <-- still top of the stack, currently forground.
ActivityA
ActivityA

我不想这样做取决于活动启动模式或意图标志。我知道如何使用它们以及它们的好处。

我目前知道我可以做的是发送广播,所有需要销毁的活动都会收听,并在收到广播时调用 Activity.finish() 。
这是可行的,但即使在他们的托管活动暂停时,它也需要注册接收者,而且我不确定从暂停的活动中调用“finish()”方法是否正确。

从恢复的活动中调用 Activity.finish() 方法是否正确?

在 OnCreate() 方法中注册接收者并取消注册 OnDestroy() 是否正确?

从恢复的活动中处理广播并从那时起调用 finish() 是否正确?

是否有“Android 方式”或某些我不知道的 API 从堆栈中清除活动?

提前致谢

4

3 回答 3

2

制作一个自定义广播接收器并将其注册到可以在您选择的事件上触发的每个活动中。在每个活动的 onReceiveMethod 中(可能被选中)只需调用 finish()。在这种情况下,您的活动将从堆栈中删除。此外,您可以访问此以获得更多帮助: 注销时,清除活动历史堆栈,防止“返回”按钮打开仅登录的活动

于 2012-05-25T05:57:47.550 回答
1

我也有同样的问题。我所做的是,我保留了一个静态数组列表,每当我从一个活动转到另一个活动时,在新活动的 onCreate() 方法中,我将当前活动的对象添加到该列表中,如下所示:

SomeClass.addActivity(CurrentActivity.this);

我在每个活动中添加了上述语句。

添加活动():

public void addActivity(final Activity activity) {
            activityList.add(activity);
        }

当我想清除堆栈时,我调用了:

public boolean clearStack() {
        for (Activity activity : activityList) {
            activity.finish();
        }
        activityList.clear();
        return (activityList.isEmpty());
    }

这样,我清除了我的活动堆栈。

谢谢 :)

于 2012-05-24T11:40:46.160 回答
0
    Intent myintent = new Intent(YourCurrentActivity.this, YourNextActivitys.class);
    myintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(myintent);
    finish();

我认为这是清除所有先前活动的正确方法...

于 2012-05-25T05:44:42.597 回答