Когда мой стек находится в этой ситуации:
A->B->C
если я запускаю D активность, я хочу, чтобы стек активности стал:
A->D
Обратите внимание, что действие C является диалоговым окном.
вот шаги, которые сделают необходимое:
fromActivityC
FLAG_ACTIVITY_CLEAR_TOP
Теперь при создании операции Сначала проверьте для этого логического «fromActivityC» и, если он присутствует, запустите действие D, иначе нормальный поток продолжается.
// following code can be used to get the boolean in the oncreate boolean entrypoint=this.getIntent().getExtras().getBoolean("fromActivityC");
Обходной путь, но надеюсь, что это поможет
Существует несколько способов удалить действие из стека или предотвратить его сложение:
Чтобы удалить свое действие из стека, просто вызовите finish(), см. здесь .
finish()
Вы также можете реализовать в своем манифесте свойство: android: noHistory = "true", которое предотвращает штабелирование действия.
См. Этот вопрос более подробно: Удаление действияиз стека истории
Вы можете попробовать завершить ActivityB при запуске ActivityC и то же самое в ActivityC при запуске A.
ActivityB
ActivityC
Ваш код будет выглядеть так:
Intent i = new Intent(this.class.ActivityC); startActivity(i); ActivityB.finish();
Немного хакерский, но вы можете начать упражнение A, пока очищаете стек, а затем начать упражнение D.
Задание A может появиться на мгновение, прежде чем исчезнет, хотя
вот лучшее решение, не зависящее от оценки содержания Intent в A: используйте флаг FLAG_ACTIVITY_TASK_ON_HOME
Intent
A
FLAG_ACTIVITY_TASK_ON_HOME
Вы также должны взглянуть на другие флаги Android Intent
при обратном вызове C, передайте сообщение обратно A и начните свой D с завершения Acall, это завершит B и C (потому что C отделен от B).