Ciao mi chiedo come stia Android gestendo la memoria e non riesco a trovare una risposta precisa da nessuna parte. Supponiamo che io abbia un'applicazione con 5 attività sullo stack di attività corrente (4 vengono arrestate e 1 viene ripristinata), non vi è alcun servizio connesso. Premo il pulsante HOME in modo che tutte le mie attività vengano interrotte. Avvio qualche altra applicazione che consuma memoria e la memoria complessiva del dispositivo inizia a essere bassa. E la domanda è
... Cosa accadrà alla mia domanda?
- Il sistema può distruggere solo una o alcune delle mie attività per recuperare la memoria?
- Il sistema interromperà l'intero processo della mia domanda? Tutte le attività verranno distrutte bene?
- Cosa succederà quando torno alla mia applicazione quando è stata completamente interrotta? Partirà dall'inizio (come il primo avvio) o proverà a ripristinare le attività allo stato precedente / se sì - è solo quella in cima alla pila o tutte?
AGGIORNARE:
Prima di porre questa domanda, ho visto il ciclo di vita delle attività alcune volte ma non ha risposte alle mie domande. Ho fatto dei test e ho delle risposte. "Interrompi processo" in DDMS era un indizio per il test.
Non ho testato la risposta per la domanda 1, ma come dice la guida:
Se un'attività viene sospesa o interrotta, il sistema può eliminare l'attività dalla memoria chiedendole di terminare o semplicemente interrompendo il processo.
Sembra che una o più delle attività possano essere distrutte delicatamente (con il metodo onDestroy) senza interrompere il processo. Riceverai semplicemente (onCreate + bundle) quando tornerai da loro.
Risposta alla domanda 2:
SÌ. Generalmente il sistema interrompe l'intero processo, ciò significa che tutti i dati, comprese le attività e i campi statici, vengono distrutti. Questo NON è fatto bene - non otterrai onDestroy o finialize () per nessuna delle tue attività sospese / interrotte. Questo è il motivo per cui saveInstanceState () viene chiamato appena prima del metodo onPause. onPause è fondamentalmente l'ultimo metodo in cui dovresti salvare qualcosa perché dopo questo metodo non potresti mai vedere onStop o onDestroy. Il sistema può semplicemente uccidere il processo distruggendo tutti i tuoi oggetti, qualunque cosa contengano e qualunque cosa stiano facendo.
Risposta alla domanda 3:
Cosa succederà quando torni a un'applicazione interrotta?
- Prima di Android 2.2, l'applicazione partirà dall'inizio, con attività di avvio.
- A partire dalla versione 2.2, il sistema ripristinerà lo stato dell'applicazione precedente. Cosa significa? Significa che l'ultima attività visibile verrà ricreata (onCreate + bundle). Cosa succederà con lo stack di attività? Stack va bene ma tutte le attività su di esso sono morte. Ognuno di essi verrà ricreato (onCreate + bundle) quando ci torni con il pulsante Indietro. C'è un'altra cosa su questo:
Normalmente, il sistema cancella un'attività (rimuove tutte le attività dallo stack sopra l'attività di root) in determinate situazioni quando l'utente seleziona nuovamente quell'attività dalla schermata principale. In genere, questo viene fatto se l'utente non ha visitato l'attività per un certo periodo di tempo, ad esempio 30 minuti.
Conclusione?
- Non pensare che i problemi di rotazione delle attività di gestione possano essere risolti da android: configChanges = "orientamento". Quando lo fai, avrai molti altri problemi di cui non sei nemmeno a conoscenza.
- Prova la tua applicazione con DDMS - Pulsante Interrompi processo. Guarda questo
- Fai attenzione quando usi variabili statiche. Non pensare che quando li hai inizializzati nell'attività 1, li avrai inizializzati nell'attività 2. L'unico posto sicuro per inizializzare la statistica globale sarebbe la classe Application.
- Ricorda che potresti non vedere mai onStop o onDestroy. Chiudi file / database, ferma i downloader in onPause. Quando vuoi che l'app faccia qualcosa in BG, usa il servizio in primo piano.
Sarebbe così ... Spero di aver aiutato con il mio essey :)
