OnDestroy не срабатывает, когда мы очищаем стек операций с помощью FLAG_ACTIVITY_NEW_TASK - PullRequest
0 голосов
/ 11 декабря 2018

В Android, давайте предположим, что у меня есть следующие действия

Деятельность A -> Деятельность B -> Деятельность C -> Деятельность D

В некоторых сценариях янеобходимо непосредственно перейти от действия D к действию A (пример: сценарий выхода из системы).В этом случае я использую метод ниже, чтобы очистить backstack и перейти к Деятельности А. Это не что иное, как убийство и открытие приложения снова.

        // Go to LoginActivity.java
        Intent intent = new Intent(this, LoginActivity.class);
        intent.addFlag(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(intent);
        finish();

Это абсолютно нормально работает!В этом нет сомнений.

Что мне сейчас нужно?

Когда я перехожу от Деятельности D к А (используя FLAG_ACTIVITY_NEW_TASK.) Iожидается, что OnDestroy() метод Деятельности D, C, B выполнится.Но в настоящее время это не удар / запуск.

Почему я ожидаю вызова метода OnDestroy?

Мне понадобится вызвать один метод trackevent (отменить регистрацию) из всех действий при очистке обратнойстек.Например: из действий D, C и B. Следовательно, я ожидаю, что метод OnDestroy будет вызываться (или любой метод тоже подойдет).Пожалуйста, помогите мне в этом?

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018
 finishAffinity();
 startActivity(new Intent(this,ActivityA.class));

Для перехода от последнего (ActivityD) к первому действию (ActivityA) после очистки обратного стека попробуйте приведенный выше код.

  1. Удалите все действия из обратного стека с помощью.
  2. Послекоторые называют деятельность.
0 голосов
/ 11 декабря 2018

Согласно документам

FLAG_ACTIVITY_CLEAR_TOP : если экземпляр запускаемого действия уже существует в заднем стеке, уничтожает любое другое действие поверх него и направьте Intent к существующему экземпляру.При использовании вместе с FLAG_ACTIVITY_NEW_TASK этот флаг определяет местонахождение всех существующих экземпляров действия в любой задаче и выводит его на передний план.

Вы можете достичь с помощью замены Intent.FLAG_ACTIVITY_CLEAR_TASK на Intent.FLAG_ACTIVITY_CLEAR_TOP.

Модифицированный код:

Intent intent = new Intent(this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Таким образом, будут вызваны все действия в методе onDestroy обратного стека, включая ваш LoginActivity's onDestroy метод в том же порядке, в котором они были вставлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...