2013-02-18 10 views
7

Ho una confusione su cosa dovrebbe andare in , onStop e onSaveInstanceState. Ad esempio, i documenti dicono che Android Per -android - dati memorizzati in onPause, onStop o onSaveInstanceState

Commit modifiche non salvate, ma solo se gli utenti si aspettano tali modifiche siano salvate in modo permanente quando escono (come ad esempio un progetto di e-mail).

Per onStop -

si dovrebbe usare onStop() per eseguire, più la CPU più grandi operazioni di intercettazione verso il basso, come ad esempio la scrittura di informazioni in un database.

Per onSaveInstanceState

vostra attività potrebbe avere ulteriori informazioni sullo stato che si desidera ripristinare, come ad esempio le variabili membro che traccia i progressi dell'utente nell'attività.

Non è vero che queste tre cose puntano fondamentalmente alla memorizzazione di informazioni come di un modulo o di un'e-mail? Quindi in quale metodo dovrebbe essere salvato?

risposta

6

Tutto ciò che si desidera essere persistente deve essere memorizzato in onPause() perché alcune versioni di Android considerano la tua app da abbattere dopo onPause() restituita.

La distinzione un po 'poco chiara viene effettuata perché onPause() si verifica relativamente spesso, e anche in molte circostanze in cui probabilmente non si salverà lo stato per un onResume() della stessa attività. Quindi, tutti vogliono che tu ci pensi due volte prima di eseguire operazioni costose in onPause().

La tua domanda riguardante la memorizzazione dei dati del modulo, beh, potresti renderla persistente quando un campo di input perde il focus, se è veramente inteso che l'utente vede gli stessi dati del modulo anche dopo aver fermato l'app e riavviarlo.

+0

'onStop()' è garantito per essere chiamato da Honeycomb (3.0), che rappresenta il 96,8% dei dispositivi Android a partire da gennaio 2016. Quindi preferisco usare 'onStop()' su 'onPause()' per salvare i dati adesso. –

+0

@VickyChijwani Da un punto di vista dell'ingegneria del software, _preferring_ 'onStop()' su 'onPause()' non è accettabile, a meno che non sia _require_ Android 3.0 esplicitamente nei metadati della tua app (che non menzioni). –

+0

Giusto, faccio le mie app per Android 3.0 e versioni successive, avrei dovuto dirlo.L'altra ragione (discutibile) che preferisco 'onStop()' è a causa di questa riga nei ['onPause()' docs] (http://developer.android.com/reference/android/app/Activity.html#onPause % 28% 29): "Quando l'attività B viene lanciata di fronte all'attività A, ... B non verrà creata fino a quando non viene restituito A 'onPause()', quindi assicurati di non fare nulla di strano qui. " Naturalmente, i documenti del ciclo di vita nel loro complesso sono ancora piuttosto confusi, quindi questo non è decisivo. –

2

Per chi viene qui o dopo il 2016, nota che la risposta di @Class Stacker è alquanto obsoleta. In particolare, onStop() è garantito per essere chiamato dal Android 3.0 (Honeycomb), che rappresenta il 96.8% of Android devices a partire dal gennaio 2016.

, consultare la documentazione del ciclo di vita qui: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle (Ctrl + F per "non nello Stato killable")

UPDATE: come giustamente sottolineato nei commenti, questo ovviamente significa che l'app deve essere limitata esclusivamente ad Android 3.0 e versioni successive.

+0

Giusto per chiarire di nuovo (anche sopra indicato), la percentuale di per sé non è un punto sufficiente. Un'app che non risolva la persistenza in 'onPause()' deve essere strettamente limitata ad Android 3 e versioni successive. –

Problemi correlati