¿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.
- Los fragmentos de ViewPager no se recrean después de FragmentTransaction.replace () seguido por el botón de retroceso
- Android Fragment onCreateView vs. onActivityCreated
- Android DialogFragment desaparece después del cambio de orientación
- OnCreate () llamado mientras se detiene la actividad (pero no se destruye). Sólo después de la instalación
- Evitar que el diálogo se abra varias veces al reanudar la actividad
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?
- Cómo "destruir" varias actividades de Android al mismo tiempo
- ¿Puede Wi-Fi o la CPU ir a dormir cuando la pantalla está encendida?
- FacebookActivity no llamó a finish () en Api 23+
- Una vez más en el ciclo de vida de la actividad: onStart se llama cuando no debe ser
- Android: cómo registrar todas las llamadas a los métodos de actividad?
- Cambio de configuración con Robolectric
- Ciclo de vida de android onActivityResult vs onStop
- Android: detención de actividad que no se reanuda
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 nfc intent-filter para mostrar mi aplicación cuando nfc descubre una etiqueta
- Inicio del estudio de Android fallido – Java.lang.IllegalArgumentException