2013-08-06 16 views
6

Ho un viewpager contenente molti frammenti. Quando l'attività viene inviata in background e quando sono necessarie risorse, il sistema operativo uccide l'app o almeno alcuni frammenti. Quando torno all'attività si blocca perché l'attività tenta di allegare nuove istanze di tutti i frammenti che conteneva prima del clean-up e ora alcuni campi sono nulli. Questo, naturalmente, potrebbe essere risolto implementando correttamente il salvataggio e il ripristino dello stato utilizzando i pacchetti, ma non voglio farlo. Invece voglio impedire il ripristino dei frammenti. C'è un modo per dire al sistema operativo che una volta che ha inviato il GC e distrutto i frammenti, non dovrebbe preoccuparsi di ricrearli del tutto? Una volta eseguita la pulizia, desidero che l'attività venga semplicemente ricreata al momento del reso, come se un utente la lanciasse toccando l'icona. Qualche possibilità di farlo?Android impedisce il ripristino dell'attività

La soluzione proposta qui https://stackoverflow.com/a/15683289/552735 non funziona. Causa eccezioni java.lang.IllegalStateException: Fraging non esiste più per la chiave f2: index 3

+1

Hai provato ad aggiungere 'finish()' nel metodo 'onStop()' dell'attività che contiene i tuoi frammenti? Non salverà gli stati di nulla. –

+0

Che uccide l'attività ogni volta che viene inviato allo sfondo, anche quando premo il tasto Home. Questo non è quello che voglio - voglio solo che il sistema operativo smetta di ricreare tutti i frammenti che esistevano prima che li distruggesse. Per quanto posso vedere, il ViewPager ha il proprio meccanismo di ripristino dello stato, questo è ciò che causa questi problemi. – delegate

risposta

8

Ho avuto un problema proprio così. Ecco come ho riparato:

@Override 
    protected void onSaveInstanceState(Bundle savedInstanceState) 
    { 
     savedInstanceState.clear(); 
    } 

Nota che questo metodo farà in modo che assolutamente alcuna informazione di stato di interfaccia utente verranno memorizzate quando l'attività viene ucciso dal sistema - questo ha l'effetto di, inoltre, non ripristinare alcun Visualizzazioni quando onRestoreInstanceState() ottiene chiamato con lo stesso pacchetto dopo onStart().

+2

Questa non è una soluzione, questo è il trattamento dei sintomi – Roel

+1

Questa è un'ottima soluzione se il ripristino dello stato dell'attività non è fondamentale o importante. In questo modo, l'intera attività viene ricreata di nuovo e tutto funziona correttamente. –

0

Non è possibile disabilitare le azioni di stato dell'istanza di salvataggio/ripristino. Nel caso in cui non si desideri implementare effettivamente questa logica, è necessario ricaricare il modulo, soprattutto se il modulo è pesantemente caricato con frammenti.

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    startActivity(new Intent(this,YOUR_ACTIVITY.class)); 
    finish(); 
} 
+0

Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo riguardo a come e/o perché risolve il problema migliorerebbe il valore a lungo termine della risposta. – Badacadabra

Problemi correlati