2015-04-22 15 views
6

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.

+0

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. –

+0

@ 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

+0

Application.onTrimMemory() e Application.onLowMemory() sono solo callback di eventi speciali, non vengono sempre chiamati. Quindi non possiamo usarli per questo scopo. –

risposta

0

Per prima cosa ti suggerisco di archiviarlo invece nell'applicazione, potresti passare i tuoi dati alla tua attività tramite intento. In questo modo, quando l'attività viene ripristinata, l'Intento salvato restituirà i suoi dati.

Ora per un suggerimento alla tua domanda effettiva:

  1. quando l'attività viene ripristinato, si verificherà se i dati in oggetto Application è nullo
  2. se sono si dovrebbe chiamare questo:

    Intent newIntent = new Intent(FarAwayActivity.this, InitialActivity.class); 
    newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(newIntent); 
    

Ora dovrebbe cancellare lo stack fino a trovare InitialActivity.

Problemi correlati