2011-08-29 14 views
9

Guardando il diagramma del ciclo di vita delle attività, noto che onPause() e onStop() possono entrambi portare alla "morte" del processo. Ciò richiederebbe il onCreate() da chiamare quando l'utente desidera riprendere la propria applicazione. Il punto è che onStop() non è necessariamente chiamato, né è onDestroy(), ma che onPause() potrebbe essere l'unico evento che l'attività potrebbe vedere. Stando così le cose, onPause() deve gestire il salvataggio dello stato dell'applicazione in modo che l'utente possa tornare ad esso in seguito, indipendentemente dal fatto che sia stato chiamato o meno onStop().Android onStop/onDestroy - quando potrebbero essere utilizzati?

Posso vedere onDestroy() essere utilizzato per ripulire le risorse specifiche dell'attività che verrebbero eliminate in un'azione di eliminazione dei processi. C'è qualcos'altro che lo onDestroy() sarebbe adatto a?

E a cosa servirebbe onStop()? Perché dovrei ignorarlo?

risposta

4

Se ho risposto correttamente alla domanda: Dipende da cosa vuoi fare con la tua applicazione. Diciamo che stai programmando un'applicazione che usa il GPS. Nel numero onStop() che viene chiamato quando l'attività non è più visibile all'utente, è possibile rimuovere queste richieste. Oppure puoi interrompere il servizio se la tua applicazione ne sta eseguendo. Oppure puoi salvare le preferenze (non consigliato, fallo invece in onPause()) oppure puoi chiudere la connessione permanente ad un server ..... Se penso ad altro, aggiungerò altro ...

+0

cosa di onStop()? – user574771

+0

Mi dispiace, mi riferivo a 'onStop()', lapsus mentis. :) Modificherò la mia risposta –

+0

Quindi sembra che tu usi onStop() in risposta all'attività non più visibile, e onPause() sarebbe prematuro rilasciare il provider GPS. Ma la mia preoccupazione è che l'uccisione del processo non possa gestire correttamente il rilascio di una risorsa. – user574771

0

Altro esempio sarebbe quello di registrare e annullare la registrazione di un ricevitore di trasmissione.

Si noti che di solito queste cose sono inserite in Frequenza e onPause, la differenza è sottile sebbene, onResume/onPause vengano chiamati quando l'attività viene posizionata dietro un'altra attività, onStart/onStop vengono chiamati quando l'attività non è più visibile nel schermo.

+0

E l'altra sottile differenza è che se sono i Start e Stop, cosa succede quando onStop non viene chiamato, ma il processo viene eliminato? Il ricevitore della trasmissione non è registrato correttamente? Suppongo che lo sia. – user574771

2

Se avete letto il documento più, si vedrà in seguito:

Salvataggio stato di attività

L'introduzione alla gestione dell'attività Lifecycle accenna brevemente che quando un'attività è in pausa o arrestato, viene mantenuto lo stato dell'attività . Questo è vero perché l'oggetto Activity è ancora trattenuto nella memoria quando è in pausa o interrotto: tutte le informazioni sui suoi membri e lo stato corrente sono ancora attive. Pertanto, le modifiche apportate dall'utente nell'attività vengono mantenute in memoria, in modo che quando l'attività ritorna in primo piano (quando si "riprende"), tali modifiche sono ancora lì.

Tuttavia, quando il sistema distrugge un'attività per recuperare la memoria , l'oggetto Attività viene distrutto, quindi il sistema non può semplicemente ripristinarlo con il suo stato allo stato . Invece, il sistema deve ricreare l'oggetto Attività se l'utente torna ad esso. Tuttavia, l'utente è ignaro che il sistema ha distrutto l'attività e lo ha ricreato e, , probabilmente si aspetta che l'attività sia esattamente come era.In questa situazione , è possibile conservare importanti informazioni sullo stato dell'attività implementando un metodo callback aggiuntivo che consente di salvare informazioni sullo stato dell'attività e ripristinarlo quando il sistema ricrea l'attività .

Riepilogo: Dopo aver completato onStop() l'oggetto attività è ancora vivo nella memoria. E questo aiuterà il sistema a ripristinare l'attività.

Esempio molto semplice: considera che stai mostrando la tua attività all'utente, e improvvisamente il tuo amico ti chiama! Riposo che puoi capire ..

Quindi ora dipende da te che, quali sono le risorse/oggetti/connessioni dovrebbero essere rilasciati su quale evento.

Problemi correlati