¡Guardar y Restaurar el Estado de la Instancia Es Fácil!

Como principiante que crea aplicaciones simples, puede notar durante las pruebas que la rotación de pantalla restablece todos los datos recopilados del usuario. La rotación de la pantalla es uno de los muchos cambios del ciclo de vida en Android que pueden destruir y recrear la Actividad y causar la pérdida de todos los datos. No es una gran experiencia de usuario.

Para preparar su aplicación para estos cambios en el Ciclo de vida de la actividad, hay dos métodos que puede agregar a la actividad principal para guardar y restaurar los datos:

  1. onSaveInstanceState()
  2. onRestoreInstanceState()

El onSaveInstanceState() método que permite agregar los pares clave/valor para la outState de la aplicación. A continuación, el método onRestoreInstanceState() le permitirá recuperar el valor y volver a configurarlo en la variable de la que se recopiló originalmente.

Para preparar su aplicación para que las use, es importante crear variables de instancia para todos los datos que deberán conservarse cuando el estado de la aplicación haga que se destruya la Actividad. Estas variables están fuera de cualquier método y son accesibles desde cualquier lugar de la clase.

También querrá identificar las vistas que muestran estos datos al usuario e indicar que desea que los datos continúen mostrándose aquí cuando se restaure la Actividad con el atributo:

android:freezesText="true"

onaveinstancestate ():

Este método se llama antes de onStop () en versiones anteriores de Android y se puede llamar después de onStop () para versiones más recientes.

 1 @Override
2 protected void onSaveInstanceState(Bundle outState) {
3 super.onSaveInstanceState(outState);
4 outState.putInt("AStringKey", variableData);
5 outState.putString("AStringKey2", variableData2);
6 }

Vamos a desglosar este método:

  1. La anulación en línea uno, indica que va a anular la declaración predeterminada del método.
  2. La firma del método en la línea dos comienza con el modificador de acceso «protected», esto indica que solo se puede acceder al método dentro de la clase en sí, el paquete o una subclase. El tipo de retorno para este método es «void», ya que no devolverá ningún dato. El parámetro que toma este método es un objeto de tipo Bundle llamado outState.
  3. Dado que estamos sobreescribiendo este método predeterminado, debemos usar super (en la línea tres) para almacenar todos los datos de estado externo predeterminados.
  4. En la línea cuatro, puede comenzar a almacenar sus propios datos. Se llama a onavedinstancestate () mediante notación de puntos en el estado externo de la aplicación. El primer argumento es cualquier cadena y se usa como clave (similar a configurar una variable) para acceder al valor que almacena en el segundo argumento. Aquí hemos proporcionado una variable de instancia que almacena un valor entero. La línea de aviso cinco es muy similar, con la excepción de que una variable del tipo String se guarda en el estado externo.

onRestoreInstanceState ():

Este método se llama después de onStart ().

 1 @Override
2 protected void onRestoreInstanceState(Bundle savedInstanceState){
3 super.onRestoreInstanceState(savedInstanceState);
4 variableData = savedInstanceState.getInt("AStringKey");
5 variableData2 = savedInstanceState.getString("AStringKey2");
6 }

Vamos a desglosar este método:

  1. La anulación en la línea uno, indica que va a anular la declaración predeterminada del método.
  2. La firma del método en la línea dos comienza con el modificador de acceso «protected» esto indica que solo se puede acceder al método dentro de la clase en sí, el paquete o una subclase. El tipo de retorno para este método es «void», ya que no devolverá ningún dato. El parámetro que toma este método es un objeto de tipo Bundle llamado savedInstanceState.
  3. Dado que estamos sobreescribiendo este método predeterminado, debemos usar super, en la línea tres, para restaurar todos los datos guardados predeterminados de Instancestate.
  4. Dado que almacenó los datos de la aplicación relevantes en variables de instancia, los datos guardados en el estado externo se vuelven a establecer en la variable llamando a un método get en savedInstanceState mediante notación de puntos y proporciona la clave de cadena utilizada para almacenar los datos como argumento.

Espero que esta explicación le ayude a comprender mejor estos métodos y cómo usarlos. Para obtener más información, visita la documentación de la actividad para Android.

¡Feliz programación!