2012-07-24 12 views
11

Quando la mia applicazione è inattiva, Android interrompe il processo. Se l'utente riapre l'applicazione dopo un po 'di tempo, viene creata solo l'attività principale - questo è un problema per me perché l'attività dipende dall'inizializzazione di altri oggetti (che sono ora distrutti).Il riavvio dell'applicazione Android dopo l'elaborazione viene interrotto

Quello che voglio fare in questo caso è di riavviare l'applicazione. Come posso farlo?

+0

Android uccide un App per liberare la memoria. Quindi, se l'app è inattiva, è probabile che venga eliminata dopo qualche tempo in cui il sistema operativo necessita della memoria per eseguire altri programmi. – gkris

+0

Forse hai bisogno di un servizio in background per mantenere in esecuzione _vital_ _objects_. È possibile utilizzare un 'Intento appiccicoso' per assicurarsi che il servizio venga riavviato quando viene ucciso. – DroidBender

risposta

0

Probabilmente dovresti cercare di memorizzare tali oggetti nell'implementazione della tua app della classe Application.

Se questi oggetti contengono uno stato che deve essere più persistente, è necessario salvare lo stato di tali oggetti nel metodo onPause() di ogni attività, nel database, in SharedPreferences o in remoto.

+6

anche se li tenete nella classe 'Application', dopo che il processo è stato interrotto da' Android' gli oggetti andranno persi, e il vostro non inizierà con "l'attività di inizializzazione", ma con l'ultimo visibile. –

7

Basta identificare che il vostro Application è in fase di lancio dopo che è stato precedentemente distrutto da Android, si potrebbe fare questo mantenendo una variabile in una classe personalizzata Application, e impostarlo su true dopo la vostra applicaiton viene inizializzato. Così, quando l'applicaction viene rilanciato, questo flag è falso, e poi basta fare un Intent per lanciare il vostro principale Activity specificando FLAG_ACTIVITY_CLEAR_TOP:

Intent reLaunchMain=new Intent(this,MainActivity.class); 
reLaunchMain.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(reLaunchMain); 
+0

dove dovrei inserire questo codice? Si blocca se lo faccio in onCreate dell'attività –

+0

quale eccezione ottieni? dovresti chiamare questo quando tu ora la tua applicazione viene rilanciata da Android. –

+0

@OvidiuLatcu ciao, l'oggetto Application è ricreato quando l'attività su cui stavi (e viene ricreato) non è il programma di avvio? Devo chiedere questo perché non riesco ad agganciare il debugger nel momento in cui viene ricreata l'attività. Tks –

0

Penso che questa risposta solo per te.

Dopo chiamata progresso finitura questo

 finish(); 
     Intent intent = new Intent(this, sameactivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
Problemi correlati