Очистить активность Стек и начать новую активность в 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() для управления действиями в этом сценарии.