Variables estáticas públicas y gestión del ciclo de vida de la actividad de Android

De acuerdo con la documentación del sistema operativo Android puede matar la actividad en la parte posterior de la backstack.

Por ejemplo, digamos, por ejemplo, tengo una aplicación y abrir la Actividad Principal (llamémosla Actividad A). En esta clase de actividad pública declaro e inicializo una variable estática pública (llamémosla "foo"). En el método onCreate () de la Actividad A, entonces cambio el valor de "foo". Desde la actividad A, el usuario inicia otra actividad dentro de mi aplicación llamada Actividad B. La variable "foo" se utiliza en la Actividad B. La actividad B se detiene después de que el usuario navegue a otras actividades de otras aplicaciones. Eventualmente, después de que ocurre una escasez de memoria, la Actividad A y la Actividad B pueden ser destruidas. Después de que el usuario vuelve a mi aplicación, reinicia (en realidad "recrea") la actividad B.

Lo que pasa:

  1. ¿Variable "foo" en este punto tiene el valor que se estableció en él cuando se ejecuta el método onCreate () de la Actividad A?

  2. Variable "foo" no existe?

  3. ¿Existe la variable "foo" y ahora es el valor inicializado y no el valor establecido en el método onCreate () de la Actividad A?

Si el proceso se cancela, todas las variables estáticas se reinicializarán a sus valores predeterminados.

Así que cualquier valor que haya establecido en la Actividad A no persistirá

Buena explicación se puede ver aquí desde 2:50 http://www.infoq.com/presentations/Android-Design

Aquí hay algunas instrucciones para aquellos que quieran probar este problema manualmente: Crear el emulador v.4 de android, luego ir a la configuración -> configuración del desarrollador -> deshabilitar las tareas de fondo. A continuación, crear proyecto de ejemplo de android con 2 actividades, declarar variable estática en la actividad A, inicializarlo en el método onCreate (). Coloque un botón en la actividad A que inicie la actividad B. En el método onCreate () de la Actividad B imprima el valor de A.staticVar a logcat.

Inicie el proyecto: aparece la actividad A. Pulse el botón – la actividad B aparece, el valor de la variable estática se imprime en logcat. Pulse el botón de inicio e inicie cualquier otro programa: el proceso de proyecto de ejemplo se eliminará (porque ha desactivado los procesos de fondo). Ahora presione el botón de inicio largo – usted verá la lista de programas recientemente lanzados. Seleccione su proyecto de ejemplo: el sistema operativo intentará recuperar las actividades de su proyecto de back-stack y volver a crear la última actividad en ejecución B. Pero en este paso el programa se bloqueará con NullPointerException porque A.staticVar será nulo y estamos intentando imprimirlo en logcat.

La respuesta es (3). Si necesita conservar valores, persiste en las preferencias compartidas cuando cada actividad se detiene y restaura cuando se reanuda. Alternativamente, también puede mantener un indicador estático "inicializado" y reinicializar las variables estáticas del método onCreate() de cualquier actividad si es falsa.

  • Error al inflar el fragmento de clase InflateException Archivo XML binario
  • Eclipse android sdk bundle no puede abrir Android SDK Manager
  • El fragmento no se puede convertir en Contexto
  • ¿por qué mi método de comparación arrojar excepción - método de comparación viola su contrato general!
  • Android Location.getAccuracy () devuelve 1
  • Problemas de tiempo de espera de conexión HTTP
  • Listview con un adaptador personalizado que contiene CheckBoxes
  • Java - Convertir cadena a objeto URI válido
  • ¿Hay alguna diferencia entre Base64.encodeBase64 de Apache y Base64.encode de Android con el indicador Base64.Default?
  • Error al ejecutar sbt install-emulator
  • El servicio de Android no funciona como singleton
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.