Tengo una aplicación de Android modelada después del ejemplo LunarLander
de Google. Lo estoy depurando en un dispositivo real, (Motorola Droid
) con Android 2.0
. Cuando la orientación cambia, el programa se bloquea en un NullPointerException
. Logcat desde justo antes del accidente:"Algo mal aquí, no esperaba que se reanudara el PAQUETE" error en Logcat de Android
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"
en 24:38.620
. No tengo idea de lo que significa, pero creo que es debido a que no reacciono correctamente al cambio de pantalla.
A continuación recibo un mensaje de depuración que me imprimí desde mi propio método surfaceChanged()
sobre las nuevas dimensiones de la superficie.
Luego imprimo un mensaje de depuración sobre si las moscas eran null
. flies
es el campo que finalmente causa el NullPointerException
. Se creó una vez, y nunca se volvió a escribir para el resto del programa. Sé que no fue nulo antes del accidente, porque fue leído varias veces.
¿Alguien tiene una idea de cómo mi variable miembro privada llegó a ser nula solo por estas pistas?
Incluiría código pero hay mucho y no sé lo que sería relevante.
Esto quizás sea una solución para su aplicación, dependiendo de su caso de uso. En mi opinión, este es un comportamiento grosero obligando al usuario a un comportamiento de uso que tal vez no le guste ... – Janusz