Ho cercato di ricercare esattamente quando il metodo onDestroy viene chiamato per un'attività, ma ho letto alcune informazioni confuse e in conflitto. In generale, la mia domanda è: in quali circostanze il metodo onDestroy viene effettivamente chiamato su un'attività? Più nello specifico, se ho due attività, attività A e attività B, se l'attività A è in esecuzione e creo un intento e passiamo all'attività B, l'attività A è solo ferma o è distrutta?onStop vs onDestroy
risposta
Come affermato nella Gazzetta documentation:
onDestroy()
L'ultima chiamata si riceve prima dell'attività è distrutto. Ciò può accadere o perché l'attività sta finendo (qualcuno ha chiamato finish() su di esso, o perché il sistema sta temporaneamente distruggendo questa istanza dell'attività per risparmiare spazio. Puoi distinguere tra questi due scenari con il metodo isFinishing().
Nel tuo esempio l'attività a viene arrestato e potrebbe essere distrutte dal sistema
Nota per
documentation
link qui sopra:
... non contare su [onDestroy()
] essere chiamato come un luogo per il salvataggio dei dati ... [vedi]onPause()
oonSaveInstanceState(Bundle)
.
L'attività potrebbe non è stato arrestato a meno che il sistema non debba recuperare la memoria per altri task/processi, in generale dovrebbe essere in stato di pausa. – whoami
OnDestroy verrà chiamato direttamente da qualsiasi chiamata a finish() in onCreate, saltando su onStop. onDestroy può essere lasciato fuori dopo un kill quando onStop ritorna. A partire da Honeycomb, un'applicazione non è nello stato killable fino a quando non viene restituito onStop(); pre-honeycomb onPause era lo stato killable. –
onDestroy()
viene chiamata ogni volta:
- L'utente prende l'attività dallo schermo "app recenti".
- L'utente estrae l'attività dalla schermata "app recenti".
onStop()
viene chiamata ogni volta:
- L'utente lascia l'attività corrente.
Quindi nel tuo esempio, quando l'utente avvia Attività B, Attività A chiamata onStop()
.
EDIT: Il metodo onDestroy()
non è sempre chiamato, secondo la documentazione. onStop()
viene sempre chiamato, quindi è necessario spostare il codice prima che l'attività si interrompa.
Spero che questo ha aiutato: D
Non esattamente.Quelle sono * possibilità * ma non è garantito che onStop() o onDestroy() saranno * mai * chiamati. –
@ChrisStratton Se si utilizza '@ Override' prima del metodo, è garantito l'esecuzione del codice con quel metodo specifico, in questo caso' onStop() 'e' onDestroy() ' –
No, non lo è. Vedi la documentazione. Il sistema è libero di uccidere semplicemente il processo senza preoccuparsi di chiamare questi metodi. Generalmente li chiamerà, ma i documenti dicono che è libero di non farlo. –
Controllo ai cicli di vita Android su Android: http://stackoverflow.com/questions/8515936/android-activity-life-cycle-what-are-all-these-methods- per –
Possibile duplicato di [Android onStop/onDestroy - quando potrebbero essere usati?] (http://stackoverflow.com/questions/7236357/android-onstop-ondestroy-when-might-thes-be-used) –