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