Очистить активность Стек и начать новую активность в android
Мой вопрос немного отличается от этого типа вопроса. Мне нужно удалить или очистить свой стек активности, а затем запустить новое действие. Я не думаю, что это проблема с clear_top. Я объясняю с примером:
Мой поток активности:
Login > Home > Screen1 > screen2 ....
Я завершаю активность входа или звоню с флагом no_history. Итак, мои действия выглядят так:
Login(finished)> Home [bottom of the stack now] > Screen1 > Screen2[top of the stack]
Мне нужно обработать ошибку сеанса. Если какая-либо ошибка сеанса возникает в любой точке, мне нужно вернуться к активности входа. Но помните, что у меня нет активности входа в стек. Поэтому clear_top не будет работать.
Если в Screen2 возникает какая-либо ошибка сеанса, тогда мне нужно очистить полный стек (screen2, screen1, home), а затем начать активность входа. Чтобы после нажатия кнопки нажать активность входа, закройте мои приложения.
Есть ли способ очистить стек активности?
заблаговременно
Ответы
Ответ 1
Используйте этот
Intent i = new Intent(yourScreen.this,Home.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("EXIT", true);
startActivity(i);
и в onCreate класса Home, сделайте это, чтобы проверить,
if (getIntent().getBooleanExtra("EXIT", false))
{
Intent i = new Intent(Home.this,Login.class);
startActivity(i);
finish();
}
что это будет по существу делать независимо от того, какая вы активность, вы можете вызвать домашний экран с четким верхним флагом. На главном экране есть условие проверки в методе onCreate, которое поможет очистить стек и перейти на экран входа в систему. Теперь на экране входа в систему, если вы нажмете кнопку "Назад", вы выйдете из приложения, когда стек очищается..
Сообщите мне, если проблема по-прежнему сохраняется...
Ответ 2
Это старый вопрос, но, возможно, кто-то еще наткнется на него, ища ответ на подобную проблему.
Вы должны запустить активность входа с флагами: Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
- флаг NEW_TASK
может иметь немного запутывающее имя, но он фактически создаст новую задачу, только если она не существует (в противном случае текущая задача будет использоваться) - и CLEAR_TASK
очистит его от всех предыдущих действий.
Ответ 3
Попробуйте это,
Завершите текущую деятельность
YourCurrentActivity.this.finish();
Intent intent1 = new Intent(YourCurrentActivity.this,LoginActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent1);
Он будет работать, даже если ваша активность не находится в стеке.
Надеюсь, что это поможет.
Ответ 4
Использовать onActivityResult() для управления действиями в этом сценарии.