Ho un'applicazione con molte attività. Tra questi c'è lo InitialActivity
che carica i dati principali. È un'attività di avvio e nessuna delle attività successive può vivere senza i dati caricati.Cancella back stack quando l'oggetto dell'applicazione viene ucciso dal sistema
Così lancio l'app, il InitialActivity
sta caricando i dati, quindi naviga allo MainActivity
e quindi sto navigando ad alcuni FarAwayActivity
. Quindi sto passando ad altre app (alcune sono pesanti) e la mia applicazione viene uccisa in background. Ho inserito la chiamata di registro nel mio Application.onCreate()
e posso vedere che viene chiamato di nuovo, quando torno alla mia applicazione. Quindi sono sicuro che l'app viene uccisa sullo sfondo. Ma Android porta l'ultimo FarAwayActivity
in cima e si blocca immediatamente perché tutti i dati caricati sono nulli.
Quindi la domanda è: come posso dire all'applicazione di ricominciare da InitialActivity
quando (e solo quando) viene ucciso e ripristinato? Qualcosa come "dimentica il mio back stack", ma presumibilmente automaticamente, nel manifest.
Ho già letto e provato tutto da Activity tag docs, ma nulla corrisponde alle mie aspettative. La cosa più vicina è android:clearTaskOnLaunch="true"
, ma cancella tutte le altre attività nello stack quando si riavvia l'app dal desktop (e l'app non viene ancora uccisa, quindi tutti i dati sono disponibili). Per essere chiari, voglio iniziare con InitialActivity solo dopo che l'app è stata effettivamente uccisa.
hai trovato alcun callback sulla classe Application quando il contesto dell'applicazione viene interrotto? Per quanto riguarda la mia migliore conoscenza, non ce n'è. se ci fosse, allora potresti cancellare il tuo stack completo a quel punto. a meno che non si disponga di quel punto di richiamata specifico, è necessario intervenire per decidere sui dati. –
@ AmitK.Saha: ci sono i metodi 'Application.onLowMemory()' e 'Application.onTrimMemory()', ma dubito di poterli usare per cancellare lo stack posteriore. Come so, il back-stack cleanup viene eseguito lanciando un singolo 'Activity' root con il flag' FLAG_ACTIVITY_CLEAR_TOP'. Quindi lanciare il nuovo 'Activity' a quel punto non è assolutamente OK. – Andrew
Application.onTrimMemory() e Application.onLowMemory() sono solo callback di eventi speciali, non vengono sempre chiamati. Quindi non possiamo usarli per questo scopo. –