Tutte le attività nella mia applicazione richiedono che un utente abbia effettuato l'accesso per visualizzare. Gli utenti possono disconnettersi da quasi tutte le attività. Questo è un requisito dell'applicazione. In qualsiasi momento se l'utente si disconnette, desidero inviare l'utente al Login Activity. A questo punto desidero che questa attività si trovi nella parte inferiore dello stack della cronologia, in modo che premendo il pulsante "indietro" si riporti l'utente alla schermata principale di Android.
Ho visto questa domanda porre alcuni posti diversi, tutti hanno risposto con risposte simili (che traccerò qui), ma voglio metterlo qui per raccogliere feedback.
Ho provato ad aprire l'attività di accesso impostando i suoi Intentflag su ciò FLAG_ACTIVITY_CLEAR_TOPche sembra fare come indicato nella documentazione, ma non raggiungo il mio obiettivo di posizionare l'attività di accesso in fondo allo stack della cronologia e impedire all'utente di tornare indietro alle attività di accesso precedentemente visualizzate. Ho anche provato a utilizzare android:launchMode="singleTop"l'attività di accesso nel manifest, ma questo non raggiunge neanche il mio obiettivo (e sembra non avere alcun effetto comunque).
Credo di dover cancellare lo stack della cronologia o terminare tutte le attività precedentemente aperte.
Un'opzione è fare in modo che ogni attività onCreatecontrolli lo stato di accesso e, finish()se non è stato effettuato l'accesso. Questa opzione non mi piace, poiché il pulsante Indietro sarà ancora disponibile per l'uso, tornando indietro quando le attività si chiudono.
L'opzione successiva è quella di mantenere una serie LinkedListdi riferimenti a tutte le attività aperte che sono staticamente accessibili da qualsiasi luogo (magari utilizzando riferimenti deboli). Al logout accederò a questo elenco e passerò in rassegna tutte le attività precedentemente aperte, invocando finish()ognuna. Probabilmente inizierò presto a implementare questo metodo.
Preferirei usare qualche Intenttrucco con la bandiera per realizzare questo, comunque. Sarei felice di scoprire che posso soddisfare i requisiti della mia applicazione senza dover utilizzare nessuno dei due metodi che ho descritto sopra.
C'è un modo per ottenere questo risultato usando Intento manifest le impostazioni, o è la mia seconda opzione, mantenendo una LinkedListdelle attività aperte l'opzione migliore? O c'è un'altra opzione che sto completamente trascurando?