¿Android almacena variables estáticas?

Estoy escribiendo una aplicación androide simple que es básicamente una modificación de los fragmentos demo disponibles en la documentación de Android. En la aplicación, hay un archivo llamado Ipsum.java que tiene una ArrayList estática de cadenas llamadas titulares.

En el método onCreate () de la actividad principal, tengo el siguiente código que añade algunos elementos a la lista de matrices.

if (savedInstanceState == null){ Ipsum.Headlines.add("String 1 "); Ipsum.Headlines.add("String 2"); } 

SavedInstanceState es un paquete que el sistema pasa al método, si la aplicación se reanuda desde algún estado inactivo. La lógica es que si savedInstanceState es nulo, entonces la aplicación no se reanuda pero se inicia como una nueva instancia.

Si dejo la aplicación utilizando el botón "Inicio" y vuelve a ingresar la aplicación, la lista de elementos contiene sólo los dos elementos: "Cadena 1" y "Cadena 2". (Este es el comportamiento deseado)

Sin embargo, si dejo la aplicación utilizando el botón Atrás y, a continuación, vuelve a introducir la aplicación, los elementos "Cadena 1" y "Cadena 2" se agregan de nuevo . La matriz tiene entonces 4 elementos.

 String 1 String 2 String 1 String 2 

(El contenido del arrayList se puede ver porque se usan para rellenar un listView) Parece que la aplicación está almacenando el contenido de la lista de array estática cuando se pulsa el botón back .. y que un Bundle no se pasa al onCreate () Cuando se reinicie la aplicación. ¿Puede alguien explicar lo que está sucediendo aquí, en términos del ciclo de vida de la aplicación?

Que esto le ayude:

Vamos a empezar con un poco de fondo: ¿Qué sucede cuando se inicia una aplicación?

El sistema operativo inicia un proceso y asigna un identificador de proceso único y asigna una tabla de proceso. Un proceso inicia una instancia de DVM (Dalvik VM); Cada aplicación se ejecuta dentro de un DVM. Un DVM gestiona la descarga de carga de clase, el ciclo de vida de la instancia, GC, etc.

Vida útil de una variable estática: Una variable estática entra en existencia cuando una clase es cargada por la JVM y muere cuando la clase es descargada.

Por lo tanto, si crea una aplicación de Android e inicializa una variable estática, permanecerá en la JVM hasta que suceda una de las siguientes:
1. la clase es descargada
2. la JVM se cierra
3. el proceso muere

Tenga en cuenta que el valor de la variable estática persistirá cuando cambie a una actividad diferente de otra aplicación y no ocurra ninguna de las tres anteriores. En caso de que alguno de los tres anteriores ocurra, la estática perderá su valor.

Para más detalles: Lea la respuesta de Samuh en este enlace … Haga clic aquí

Su actividad se está reanudando . Si desea controlar lo que ocurre, implemente onResume() .

Consulte Gestión del ciclo de vida de la actividad para obtener más información.

EDITAR:

Las variables estáticas son un concepto de Java. static significa que sólo hay una copia de la variable para toda la clase. La alternativa es que cada objeto tenga su propia copia.

Así que mientras tu código está en ejecución, sólo tienes una copia de la variable en tu programa . No se guarda en ninguna parte, a menos que usted agregue el código para hacer eso.

Las variables estáticas se asocian con una clase y viven mientras la clase está en la memoria, y destruyen cuando la clase se descarga (lo que muy rara vez ocurre). Puede ocurrir cuando-

  -You force stop your app. -Application crashes. -You clear your app data. -Switch off your Device(Shutdown DVM). 
  • Android: al cambiar entre dos actividades, el orden de llamada de los métodos de ciclo de vida de la actividad
  • Animaciones de transición de actividad en Android
  • Comportamiento extraño del ciclo de vida de la actividad - después onResume () también onPause () llamado ... ¿por qué?
  • ¿Se puede reanudar una actividad de Android después de finalizar ()?
  • OnCreate siendo llamado en la actividad A en la navegación ascendente
  • Fragmento no invoca onSaveInstanceState al pasar ViewPager?
  • Mostrar fragmento viewpager dentro de un fragmento
  • OnCreate () vs OnStart ()
  • ¿Debe la llamada al método de superclase ser la primera instrucción?
  • ¿Por qué utilizar Fragment # setRetainInstance (boolean)?
  • ¿Puede Android Service superar el objeto de aplicación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.