savedinstancestate practices example best activity android

android - practices - onSaveInstanceState() y onPause()



save activity state android (3)

De la guía para desarrolladores sobre activities :

Nota: Debido a que no se garantiza que se llame a onSaveInstanceState () , debe usarlo solo para registrar el estado transitorio de la actividad (el estado de la interfaz de usuario); nunca debe usarlo para almacenar datos persistentes. En su lugar, debe usar onPause () para almacenar datos persistentes (como los datos que deben guardarse en una base de datos) cuando el usuario abandona la actividad.

Estoy un poco confundido acerca de estos dos métodos en Android.

De la documentación, entiendo que se debe llamar a onSaveInstanceState() para almacenar solo información temporal, y se debe usar onPause() para almacenar cualquier información persistente.

Me preguntaba por qué llamar a onSaveInstance() , cuando se llama a onPause() cada vez. Luego leí en el tutorial de Bloc de notas:

"Tenga en cuenta que se debe llamar a onSaveInstanceState() en onSaveInstanceState() y onPause() para garantizar que los datos se guarden. Esto se debe a que no hay garantía de que se onSaveInstanceState() y porque cuando se llama, se llama antes de onPause() . "

No hay garantía de que se onSaveInstanceState() porque simplemente puede salir de la actividad usando el botón Atrás.

Pero de acuerdo con esto, si no guarda los datos persistentes dentro de ambos métodos, la aplicación podría onSaveInstanceState() mientras se está dentro de onSaveInstanceState() .

Entonces, necesitamos guardar los datos persistentes en ambos métodos, ¿verdad?

Pero si esto es cierto, ¿no es esto una sobrecarga y quizás debería haber alguna otra bandera adicional para saber si el método ya se ha llamado o algo así?

http://developer.android.com/resources/tutorials/notepad/notepad-ex3.html


Puede guardar el estado de la instancia que no se ve ("estado interno, como las preferencias del usuario") en un soft kill (cambio de orientación) en onSaveInstanceState usando paquetes y en un hard kill (botón Atrás mientras estamos enfocados) en onStop usando las preferencias. Si tiene otros datos ("datos parecidos a documentos compartidos, normalmente almacenados en una base de datos SQLite usando un proveedor de contenido"), debe hacer esto en una onPause .


onSaveInstanceState() está destinado a "recordar" el estado actual cuando se produce un cambio de configuración, como por ejemplo un cambio de orientación de la pantalla. Esto no es para la "persistencia a largo plazo".

En el ejemplo del bloc de notas, esto puede ser el mismo en ambos casos. En otras aplicaciones, como por ejemplo un cliente de Twitter, los datos en sí pueden persistir en un servicio en segundo plano. En onCreate() algunos elementos se extraen de la base de datos y se muestran y, por ejemplo, se recuerda la posición actual. Cuando se produce un cambio de orientación, esta "posición actual" podría recordarse en onSaveInstanceState() y más tarde en onCreate() después de que se use el cambio de orientación para mostrar el mensaje que el usuario ha visto por última vez.

Véase también esta guía .