2012-08-24 9 views
5

Paso un booleano a mi Actividad cuando lo creo a través de un BundleExtra de Intención. Ahora mirando el activity lifecycle, si mi actividad se detiene (onStop), entonces otra aplicación necesita memoria para que el proceso de la aplicación se elimine, luego el usuario navega a la actividad (onCreate). ¿El último onCreate contendrá mi booleano original que aprobé? Asumiría que si quisiera que ese booleano fuera guardado, necesitaría guardarlo en OnSaveInstanceState, ¿correcto?Si se detiene una actividad, se vuelve a crear lo que se pasa a getIntent()

Respuesta

2

me gustaría utilizar onPause() por esta razón (de la docs)

Tenga en cuenta que es importante guardar los datos persistentes en onPause() en lugar de onSaveInstanceState (Bundle), ya que esta última no es parte de las devoluciones de llamadas del ciclo de vida , por lo que no se llamará en todas las situaciones como descrito en su documentación.

A continuación, vuelva a leerlo en onCreate() p. de base de datos o algún otro recurso que lo ha almacenado en

Así que dependiendo de lo importante que es el valor booleano que va a utilizar el mecanismo de ahorro que desea .. de estado persistente:. http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState

Y para el estado de la interfaz de usuario, tales como textos sencillos , selecciones utilizan onSaveInstanceState como se describe aquí: Saving Android Activity state using Save Instance State

A modo de resumen: cuando el proceso matado booleano = idosi no se guardan :)

+0

perfecto. Como un resumen es exactamente lo que estaba buscando. De hecho, quiero que ese booleano se haya ido para que pueda rastrear dónde se llama al onCreate desde – jsb

1

Ma Uno V. tiene razón, en su caso debe ir con onPause()

El hecho es onSaveInstanceState (paquete Bundle) está diseñado para guardar el estado en su instancia actual. Así que cuando su aplicación está muerto, el haz ahorrado demasiado

Usted puede utilizar SharedPreferences para guardar su booleano:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
sharedPreferences.edit().putBoolean("hiBoolean", booleanValue).commit(); 

y recuperarlo en su onCreate:

Boolean hiBoolean = sharedPreferences.getBoolean("hiBoolean", true); 
+0

Esto no es correcto. Cuando se mate el proceso que aloja su aplicación, ActivityManager conservará el "paquete de estado de la instancia de guardar" y se transmitirá cuando el usuario navegue a su aplicación. Android creará un proceso y creará una instancia de la aplicación y luego creará la actividad que estaba en la parte superior de la pila y luego pasará el último paquete de estado de la instancia guardada. Anteriormente, este paquete no se podía conservar a través de los reinicios del dispositivo, pero Android se está volviendo increíble día tras día e iniciando el nivel de SDK 21, el paquete también se conserva durante los reinicios. –

3

En realidad, cuando su actividad se recrea, el intento original se seguirá utilizando. getIntent() devolverá la misma intención que cuando se creó por primera vez. Sin embargo, si tiene otros datos que desea conservar cuando se recrea la actividad, deberá guardarlos usando saveInstanceState(). Puede verificar esto simplemente girando el dispositivo con una actividad en ejecución, ya que se destruirá y volverá a crear con la misma intención. Para obtener más información, consulte here.

Cuestiones relacionadas