Wszystkie działania w mojej aplikacji wymagają zalogowania użytkownika, aby wyświetlić. Użytkownicy mogą wylogować się z niemal każdej aktywności. Jest to wymóg aplikacji. W dowolnym momencie, jeśli użytkownik wyloguje się, chcę wysłać użytkownika do Loginu Activity. W tym momencie chcę, aby ta aktywność była na dole stosu historii, więc naciśnięcie przycisku „wstecz” powoduje powrót użytkownika do ekranu głównego Androida.
Widziałem to pytanie zadane w kilku różnych miejscach, na wszystkie odpowiedziały podobne odpowiedzi (które tutaj zarysowuję), ale chcę je zadać tutaj, aby zebrać opinie.
Próbowałem otworzyć działanie logowania, ustawiając jego Intentflagi, FLAG_ACTIVITY_CLEAR_TOPktóre wydają się robić tak, jak opisano w dokumentacji, ale nie osiągam celu, jakim jest umieszczenie działania logowania na dole stosu historii i uniemożliwienie użytkownikowi powrotu do poprzedniej strony do wcześniej zarejestrowanych zalogowanych działań. Próbowałem również użyć android:launchMode="singleTop"do zalogowania się w manifeście, ale to również nie osiąga mojego celu (i wydaje się, że i tak nie ma żadnego efektu).
Uważam, że muszę wyczyścić stos historii lub zakończyć wszystkie wcześniej otwarte działania.
Jedną z opcji jest onCreatestatus kontroli każdego działania zalogowany, a finish()jeśli nie zalogowany. Nie podoba mi się ta opcja, ponieważ przycisk Wstecz będzie nadal dostępny do użycia, nawigując wstecz w miarę zamykania się działań.
Kolejną opcją jest utrzymanie a LinkedListodniesień do wszystkich otwartych działań, które są dostępne statycznie zewsząd (być może przy użyciu słabych odniesień). Po wylogowaniu uzyskam dostęp do tej listy i powtarzam wszystkie wcześniej otwarte działania, wywołując finish()każdą z nich. Prawdopodobnie zacznę wkrótce wdrażać tę metodę.
Wolę jednak użyć pewnych Intentsztuczek z flagą, aby to osiągnąć. Z przyjemnością stwierdzę, że mogę spełnić wymagania mojej aplikacji bez konieczności korzystania z jednej z dwóch opisanych powyżej metod.
Czy istnieje sposób na osiągnięcie tego poprzez użycie Intentlub manifestowanie ustawień, czy też moja druga opcja, utrzymywanie LinkedListotwartych działań, jest najlepszą opcją? Czy jest jeszcze inna opcja, którą całkowicie pomijam?