从堆栈中清除后台活动/活动的正确方法是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从堆栈中清除后台活动/活动的正确方法是什么?相关的知识,希望对你有一定的参考价值。

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

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

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?

提前致谢

答案

制作一个自定义广播接收器并在每个可以根据您选择的事件触发的活动中注册它。在每个活动的onReceiveMethod(可能被选中)只需调用finish()。在此,您的活动将从堆栈中删除。您还可以访问此处获取更多帮助:On logout, clear Activity history stack, preventing "back" button from opening logged-in-only Activites

另一答案

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

SomeClass.addActivity(CurrentActivity.this);

我在每个活动中添加了上述声明。

addActivity():

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

当我想清理堆栈时,我打电话给:

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

通过这种方式,我清除了我的活动堆栈。

谢谢 :)

另一答案
    Intent myintent = new Intent(YourCurrentActivity.this, YourNextActivitys.class);
    myintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(myintent);
    finish();

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

以上是关于从堆栈中清除后台活动/活动的正确方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章

启动新活动并清除除家庭活动外的先前活动

清除旧 SDK(缺少 FLAG_ACTIVITY_CLEAR_TASK)上的完整 Android 活动堆栈

Android:从历史堆栈中清除旧的活动实例

Android:从后台堆栈中删除所有以前的活动

Android从后台堆栈中删除活动

如何清除背压事件的活动堆栈跟踪?