2010-02-01 7 views
5

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.

Respuesta

2

me fijo mediante la adición de estas dos líneas a la etiqueta de actividad en mi archivo de manifiesto

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

esto dice que mi solicitud será manejar los cambios de teclado y orientación sobre su propia (por no hacer nada) y prefiere correr en el paisaje todo el tiempo.

+0

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

3

Cambios de orientación en Android afectan el estado. Básicamente, tu actividad se destruye y se recrea. Por lo tanto, debe saber cómo se llamarán los eventos Android lifecycle y cómo guardar el estado.

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

Here is a blog post explicando algo de esto.

Cuestiones relacionadas