Domanda

Ho un'app Android modellata dopo LunarLander Esempio di Google. Lo sto debug su un dispositivo reale, (Motorola Droid) insieme a Android 2.0. Quando l'orientamento cambia, il programma si blocca su a NullPointerException. Logcat da poco prima dell'incidente:

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 prima riga che mi preoccupa è "Something wrong here" a 24:38.620. Non ho idea di cosa significhi, ma penso che sia dovuto al fatto che non reagi correttamente al cambiamento dello schermo.

Successivamente ricevo un messaggio di debug che mi sono stampato all'interno del mio metodo surfaceChanged() sulle nuove dimensioni della superficie.

Quindi stampino il messaggio di debug sull'opportunità delle mosche null. flies è il campo che alla fine causa il NullPointerException. È stato creato una volta e mai più scritto per il resto del programma. So che non era nullo prima dell'incidente, perché è stato letto più volte.

Qualcuno ha idea di come la variabile del mio membro privato sia diventato nullo solo da questi indizi?

Includerei il codice ma ce n'è molto e non so cosa sarebbe rilevante.

È stato utile?

Soluzione 2

L'ho risolto aggiungendo queste due righe al tag di attività nel mio file manifest

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

Ciò dice che la mia applicazione gestirà le modifiche alla tastiera e all'orientamento da sola (facendo nulla) e preferisce correre sempre nel paesaggio.

Altri suggerimenti

I cambiamenti di orientamento nello stato di influenza Android. Fondamentalmente, la tua attività viene distrutta e ricreata. Devi quindi essere consapevole di cosa Ciclo di vita Android Gli eventi saranno chiamati e come salvare lo stato.

Devi anche diffidare di static istanze e come ciò influisce su questo ciclo di vita.

Ecco un post sul blog spiegando un po 'di questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top