2012-04-02 12 views
7

En mi aplicación tengo Loginactivity. Tiene un nombre de usuario de variable estática y se le asignará con el usuario ingrese los valores de nombre de usuario. Loginactivity launch activity A y A lanzan B. En A utilizo la variable Loginactivity.username.android comportamiento de la variable estática en la caída de la aplicación

Ahora debido a algún error en B, se bloquea la aplicación. Cuando presiono forzar cerrar, la aplicación se reinicia y la actividad A es la actividad actual. En la actividad A, estoy usando una variable estática Loginactivity.username. Veo que después del bloqueo, esta variable obtiene su valor inicial, que es una cadena vacía "";

¿Por qué está sucediendo así? ¿Puedes explicar este comportamiento? Entonces, cuando la aplicación falla, todas las actividades en la pila se reinician. Veo que oncreate de Loginactivity no se llama. Entonces, ¿cómo se cambia el valor de la variable estática?

Respuesta

11

Sí, cuando una aplicación falla, el jvm de esta aplicación se reinicia, sus clases se vuelven a cargar y usted pierde todas las variables estáticas así como las variables de instancia.

La solución es eliminar la causa del bloqueo. :)

+0

arreglé el bloqueo, pero quería conocer el comportamiento Gracias . – png

+3

Sin embargo, esa fue una buena pregunta, no mencionada realmente en los documentos de Android. – Snicolas

+0

Acepte la respuesta si corresponde. – Snicolas

1

Esto se debe a que tiene una pérdida de memoria causada por este miembro estático que mantiene en LoginActivity.

Consideraría mantener esta variable en el ámbito de aplicación (clase de aplicación personalizada) o guardarla en DB.

De todos modos, simplemente recuerde anular esta variable cuando la aplicación esté lista.

2

Use SharedPreferences lugar, o almacenar información en la clase de aplicaciones

3

Cuando su actividad B se bloquea la máquina virtual Dalvik de Android que su aplicación se ejecuta en (cada aplicación tiene su propio DVM que son procesos separados) se mata. Cuando está comenzando la Actividad A, el nombre de usuario es "" porque Java por defecto establece todas las variables de instancia (variable de clase o campos si lo desea) en nulo (referencias), 0 (primitivas) y "" para cadenas. Entonces tu Actividad A está funcionando correctamente. Solo necesita almacenar el nombre de usuario en las preferencias compartidas, una base de datos o desencadenar el evento para que el usuario vuelva a iniciar sesión ... También arreglaría la Actividad B ... Haha

+0

Tengo una duda aquí: si la aplicación se reinicia, ¿cómo se obtiene la pila de actividad anterior? Mi aplicación cada vez que se reinicia en Loginactivity leí el nombre de usuario de sharedpref. Veo que la Logiactividad no se restared, se inicia la actividad instantanea A que se encuentra en la parte superior de la pila. ¡Y en A i establezco la variable como Loginactivity.username y esta variable se restablece aunque la actividad no se restaure! – png

+0

Quizás sus preferencias compartidas no funcionen correctamente. Tu stack fue asesinado con la VM. O su lógica para eludir la actividad de inicio de sesión tiene un problema técnico. ¿Fuente? – jjNford

Cuestiones relacionadas