Pregunta

Tengo una aplicación de Android modelada después del LunarLander Ejemplo de Google. Lo estoy depurando en un dispositivo real (Motorola Droid) con Android 2.0. Cuando cambia la orientación, el programa se bloquea en un NullPointerException. Logcat desde justo antes del bloqueo:

02-01 00:24:27.956: DEBUG/nate(8358): Starting Game
02-01 00:24:36.878: DEBUG/dalvikvm(1086): GC freed 1788 objects / 92256 bytes in 1389ms
02-01 00:24:38.542: INFO/WindowManager(1021): Setting rotation to 1, animFlags=0
02-01 00:24:38.558: INFO/ActivityManager(1021): Config changed: { scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=2 layout=34}
02-01 00:24:38.620: WARN/UsageStats(1021): Something wrong here, didnt expect org.nifong.leeder to be resumed
02-01 00:24:38.886: DEBUG/nate(8358): New Surface dimensions: 854x442
02-01 00:24:38.886: DEBUG/nate(8358): flies was null

La primera línea que me preocupa es "Something wrong here" a 24:38.620. No tengo idea de lo que significa, pero creo que es debido a que no reaccionando correctamente al cambio de pantalla.

A continuación recibo un mensaje de depuración que me imprimí dentro de mi propio método surfaceChanged() sobre las nuevas dimensiones de la superficie.

Luego imprimo un mensaje de depuración sobre si las moscas fueron null. flies es el campo que eventualmente causa el NullPointerException. Se crea una vez, y nunca se escribe nuevamente para el resto del programa. Sé que no fue nulo antes del accidente, porque se leyó varias veces.

¿Alguien tiene una pista de cómo mi variable de miembro privado llegó a ser nula solo por estas pistas?

Incluiría el código, pero hay mucho y no sé qué sería relevante.

¿Fue útil?

Solución 2

Lo arreglé agregando estas dos líneas a la etiqueta de actividad en mi archivo manifiesto.

android:configChanges="keyboardHidden|orientation"
android:screenOrientation="landscape"

Esto dice que mi aplicación manejará los cambios en el teclado y la orientación por sí solo (al no hacer nada) y prefiere funcionar en el paisaje todo el tiempo.

Otros consejos

Los cambios de orientación en el estado de afectación de Android. Básicamente, su actividad es destruida y recreada. Por lo tanto, debe ser consciente de lo que Ciclo de vida de Android Se llamarán eventos y cómo salvar el estado.

También debes tener cuidado con static instancias y cómo eso afecta este ciclo de vida.

Aquí hay una publicación de blog explicando algo de esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top