Я хочу, чтобы, когда пользователь нажимал на кнопку выхода (с любого экрана), все экраны завершались и открывался новый экран Log in .
Я перепробовал почти все FLAG_ACTIVITY для достижения этого. Я также просматриваю некоторые ответы в stackoverflow, но не могу решить проблему. Мое приложение работает на Android 1.6, поэтому я не могу использовать FLAG_ACTIVITY_CLEAR_TASK
Предполагая, что вы завершаете экран входа в систему, когда пользователь входит в систему и создается home, а затем все экраны от 1 до 5 поверх этого. Опубликованный мной код вернет вас на главный экран после завершения всех других действий. Вы можете добавить дополнительное в намерение и прочитать это в действии на главном экране и завершить его также (возможно, снова запустить экран входа в систему оттуда или что-то в этом роде).
Я не уверен, но вы также можете попробовать войти в систему с этим флагом. Я не знаю, как будут упорядочены действия в этом случае. Поэтому не знаю, очистит ли это те, что находятся под экраном, на котором вы находитесь, включая тот, на котором вы находитесь в данный момент, но это определенно правильный путь.
Ответ 2
Вы можете попробовать Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK. Это полностью очистит все предыдущие действия и запустит новое действие.
Ответ 3
Перед запуском вашего нового действия просто добавьте следующий код:
finishAffinity();
Или, если вы хотите, чтобы это работало в предыдущих версиях Android:
ActivityCompat.finishAffinity(this);
Ответ 4
Когда пользователь желает завершить все открытые действия, он должен нажать кнопку, которая загружает первое действие, которое выполняется при запуске вашего приложения, очистить все остальные действия, затем завершить последнее оставшееся действие. Следующий код запускается, когда пользователь нажимает кнопку выхода. В моем случае, LoginActivity это первое выполняемое действие в моей программе.
Приведенный выше код очищает все действия, кроме LoginActivity. Затем поместите следующий код внутри LoginActivity's onCreate(...), чтобы отслеживать, когда LoginActivity создается заново и был передан сигнал 'EXIT':
if (getIntent().getBooleanExtra("EXIT", false)) { finish(); }
Почему так сложно создать кнопку выхода в Android?
Android изо всех сил пытается отговорить вас от использования кнопки "выход" в вашем приложении, потому что они хотят, чтобы пользователя никогда не заботило, работают ли используемые им программы в фоновом режиме или нет.
Разработчики ОС Android хотят, чтобы ваша программа могла пережить неожиданное завершение работы и отключение питания телефона, и когда пользователь перезапускает программу, они продолжают с того места, на котором остановились. Таким образом, пользователь может принимать телефонные звонки во время использования вашего приложения и открывать карты, что требует освобождения вашего приложения для получения дополнительных ресурсов.
Когда пользователь возобновляет работу с вашим приложением, он продолжает с того места, где остановился, без каких-либо перерывов. Эта кнопка выхода узурпирует полномочия диспетчера действий, потенциально вызывая проблемы с автоматически управляемым жизненным циклом программы Android.