2015-03-30 9 views
5

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

+4

Controllo ai cicli di vita Android su Android: http://stackoverflow.com/questions/8515936/android-activity-life-cycle-what-are-all-these-methods- per –

+1

Possibile duplicato di [Android onStop/onDestroy - quando potrebbero essere usati?] (http://stackoverflow.com/questions/7236357/android-onstop-ondestroy-when-might-thes-be-used) –

risposta

3

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() o onSaveInstanceState(Bundle).
+0

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

+1

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

-6

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

+0

Non esattamente.Quelle sono * possibilità * ma non è garantito che onStop() o onDestroy() saranno * mai * chiamati. –

+0

@ChrisStratton Se si utilizza '@ Override' prima del metodo, è garantito l'esecuzione del codice con quel metodo specifico, in questo caso' onStop() 'e' onDestroy() ' –

+0

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

Problemi correlati