Завершить любое предыдущее действие в стеке из текущей активности?

Как завершить любую предыдущую операцию в стеке приложения (на любом уровне, я имею в виду не непосредственный родитель), из текущей активности, например, на каком-то конкретном событии, я хочу аннулировать предыдущую операцию? Любая помощь? Спасибо.

Ответ 1

Это может быть возможно с использованием статических переменных. Например, используйте логическую переменную activity_name_dirty = false; отметьте это как истину, как только ваше условие недействительности этой конкретной деятельности. Поэтому в любое время позже при вызове этого действия есть проверка состояния activity_name_dirty. Затем вы можете использовать флаги активности для создания нового момента, как описано в Основы деятельности

Ответ 2

Я знаю, что этот ответ может быть запоздалым, но я все равно отправлю его на случай, если кто-то ищет что-то вроде этого.

Что я сделал, я объявил статический обработчик в ACTIVITY_A

public static Handler h;

и в моем методе onCreate() для ACTIVITY_A у меня есть

h = new Handler() {

        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            switch(msg.what) {

            case 0:
                finish();
                break;

            }
        }

    };

Теперь из любой активности после этого, например ACTIVITY_B или ACTIVITY_C, я могу позвонить

ACTIVITY_A.h.sendEmptyMessage(0);

который затем вызывает finish() в ACTIVITY_A и ta-da! ACTIVITY_A завершается из другого действия.

Ответ 3

Вы можете использовать флаг Intent FLAG_ACTIVITY_CLEAR_TOP, чтобы перезапустить действие из стека и очистить все, что было над ним. Это не совсем то, что вы просите, но это может помочь.

Для этого используйте:

Intent intent = new Intent(context, classToBeStarted.class);
intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Ответ 4

Итак, я устал от этого, но не работал после того, как я сделал более глубокое тестирование (я оставляю его здесь для дальнейшего использования): android:clearTaskOnLaunch

Предположим, например, что кто-то запускает активность P с главного экрана, а оттуда переходит в действие Q. Затем пользователь нажимает на Home, а затем возвращается к активности P. Обычно пользователь будет видеть активность Q, поскольку это то, что они в последний раз делали в задаче P. Однако, если P установил этот флаг в значение "true", все действия над ним (Q в этом случае) были удалены, когда пользователь нажал "Домой", и задача перешла на задний план. Таким образом, пользователь видит только P, когда возвращается к задаче.

https://developer.android.com/guide/topics/manifest/activity-element.html

UPDATE Это действительно работало

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);