В моем приложении есть несколько действий. и поток очень сложный. Когда я нажимаю кнопку выхода, приложение переходит на экран входа в систему, и оттуда пользователь может выйти, нажав кнопку отмены (вызов system.exit(0)
)
когда я выхожу или возвращаюсь, система вызывает действие из стека :( как я могу очистить все действия в стеке, когда я дохожу до экрана входа в систему? вызов finish()
нецелесообразен, поскольку существует так много действий, и некоторые действия не должны быть закрыты, когда они активны, например, активны собственные камеры.
validateuser logoutuser = new validateuser();
logoutuser.logOut();
Intent loginscreen = new Intent(homepage.this, Login2.class);
(homepage.this).finish();
loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(loginscreen);
android
android-activity
stack
Джей Маю
источник
источник
Ответы:
Большинство из вас ошибаются. Если вы хотите закрыть существующий стек активности независимо от того, что там находится, и создать новый корень, правильный набор флагов будет следующим:
Из документа :
источник
IntentCompat.makeRestartActivityTask
из библиотеки поддержки.Когда вы вызываете
startActivity
последнее действие, вы всегда можете использоватькак флаг этого намерения.
Подробнее о флаге здесь .
источник
Вот простой вспомогательный метод для запуска нового действия в качестве нового основного действия, которое работает с уровня API 4 до текущей версии 17:
назовите это так из своей текущей деятельности:
источник
Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB
иначеintent.addFlags(0x8000);
никогда не будет добавленоОчистите Activity Backstate с помощью кода ниже:
Готово
источник
В моем случае LoginActivity тоже был закрыт. В следствии,
не помогло.
Однако установка
помог мне.
источник
источник
this.finish()
и другое, аsetFlags()
также для очистки текущей активности?Я заметил, что вы просили решение, которое не зависит от
finish()
, но мне интересно, может ли это помочь.Я отслеживал, поднимается ли флаг выхода с помощью статической переменной класса, которая сохраняется в течение всего срока службы приложения. В каждой соответствующей деятельности
onResume()
используйтеКласс ExitHelper
Скажем, в mainActivity пользователь нажимает кнопку для выхода - вы можете установить
ExitHelper.isExitFlagRaised = true;
и затемfinish()
. После этого другие соответствующие действия, которые возобновляются автоматически, также будут завершены.источник
Это решение работает нормально:
Но новая активность запускается долго, и вы некоторое время видите белый экран. Если это критично, используйте этот обходной путь:
Как это использовать:
Недостаток: все действия, которые должны быть закрыты в стеке, должны расширять BaseActivity
источник
Для разработчиков Xamarin вы можете использовать:
источник
Использование Kotlin:
Вы можете установить флаг напрямую, используя метод setter. В Kotlin
or
есть замена Java на побитовый или|
.Если вы планируете использовать это регулярно, создайте функцию расширения Intent
Затем вы можете напрямую вызвать эту функцию перед запуском намерения
источник