Все действия в моем приложении требуют, чтобы пользователь вошел в систему для просмотра. Пользователи могут выйти практически из любой активности. Это требование приложения. В любой момент, если пользователь выйдет из системы, я хочу отправить пользователя в Login Activity
. На этом этапе я хочу, чтобы это действие находилось внизу стека истории, чтобы нажатие кнопки «назад» возвращало пользователя на главный экран Android.
Я видел, как этот вопрос задавался в нескольких разных местах, на все ответы были даны похожие ответы (которые я описываю здесь), но я хочу задать его здесь, чтобы собрать отзывы.
Я попытался открыть действие входа, установив его Intent
флаги на FLAG_ACTIVITY_CLEAR_TOP
, что, похоже, делает то, что описано в документации, но не достигает моей цели по размещению действия входа в нижнюю часть стека истории и предотвращению пользователя от вернуться к ранее просмотренным действиям, когда вы вошли в систему. Я также пробовал использовать android:launchMode="singleTop"
для активности входа в манифест, но это тоже не достигает моей цели (и, похоже, все равно не имеет никакого эффекта).
Я считаю, что мне нужно либо очистить стек истории, либо завершить все ранее открытые действия.
Один из вариантов - иметь onCreate
проверку состояния входа в систему и finish()
, если вход не выполнен. Мне не нравится этот вариант, так как кнопка «Назад» по-прежнему будет доступна для использования, позволяя возвращаться назад, когда действия закрываются.
Следующий вариант - поддерживать LinkedList
ссылок на все открытые действия, которые статически доступны отовсюду (возможно, с использованием слабых ссылок). При выходе из системы я получу доступ к этому списку и буду перебирать все ранее открытые действия, вызывая finish()
для каждого из них. Я, наверное, скоро приступлю к реализации этого метода.
Однако я бы предпочел использовать какой-нибудь трюк с флагом Intent
, чтобы добиться этого. Я был бы очень счастлив, если бы обнаружил, что могу выполнить требования своего приложения, не используя ни один из двух методов, которые я описал выше.
Есть ли способ добиться этого, используя Intent
или настройки манифеста, или мой второй вариант, поддержание LinkedList
открытых действий - лучший вариант? Или есть еще один вариант, который я полностью упускаю из виду?