2012-03-23 21 views
24

¿Alguien sabe de una lista exhaustiva de cuándo se usará el paquete savedInstanceState en una actividad?¿Cuándo se usa realmente el paquete savedInstanceState?

Sé que se utiliza cuando cambia la orientación del dispositivo. Sin embargo, no parece usarse cuando la fuerza del usuario cierra la aplicación desde la configuración de Android, pero esto podría deberse a algo en mi código.

¿Qué otros casos hay?

Para ser claro, con "usado" me refiero a cuando se invoca onCreate(), el paquete savedInstanceState no es nulo y contiene los datos que pasé la última vez que se llamó onSaveInstanceState().

Respuesta

39

Se usa cuando el SO termina la actividad por completo (por ejemplo, cuando su actividad está en segundo plano y otra necesita recursos). Cuando esto suceda, se llamará al onSaveInstanceState(Bundle outstate) y su aplicación tendrá que agregar los datos de estado que desee guardar en outstate.

Cuando el usuario reanuda su actividad, se llama a onCreate(Bundle savedInstanceState) y savedInstanceState no será nulo si su actividad finalizó en un escenario descrito anteriormente. Luego, su aplicación puede tomar los datos del savedInstanceState y regenerar el estado de su Actividad a cómo era cuando el usuario la vio por última vez.

Básicamente en onCreate, cuando savedInstanceState es nulo, significa que se trata de un lanzamiento "nuevo" de su actividad. Y cuando es no nulo (si su aplicación guarda los datos en onSaveInstanceState(...), significa el estado de actividad tiene que ser recreada.

+1

Por lo tanto, se usa en un cambio de orientación, y cuando la aplicación finaliza debido a los bajos recursos, pero no cuando el usuario la detiene a través de la configuración de Android. ¿Algún otro caso donde sería usado? – howettl

+1

Esos son los únicos dos casos que conozco. Es una especie de caso extremo, pero sé que en Android 4.x hay una configuración en Opciones de desarrollador> No guardar actividades, y esto básicamente obligará a que se elimine cualquier actividad no visible, lo que hará que se llame a 'onSaveInstanceState'. – triad

19

onSaveInstanceState se utiliza para almacenar datos sólo para la duración de la aplicación (es decir, temporalmente)

Los datos se guarda en la memoria solo hasta que la aplicación está activa; en otras palabras, estos datos se pierden cuando la aplicación se cierra, por lo que en su caso cuando fuerza la aplicación onSaveInstanceState no se usa.

Solo se puede invocar cuando lo hace operaciones mientras su aplicación aún está activa, por ejemplo, cuando cambia la orientación de la pantalla, la actividad sigue intacta, así que onSaveInstanceState se llama.

Sin embargo, si desea almacenar permanentemente los datos, deberá usar SharedPreferences y SQLite database.

Cuestiones relacionadas