Question

J'ai une application Android modélisée après le LunarLander Exemple de Google. Je le débogue sur un vrai appareil, (Motorola Droid) avec Android 2.0. Lorsque l'orientation change, le programme se bloque sur un NullPointerException. Logcat de juste avant le crash:

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 première ligne qui m'inquiète est "Something wrong here" à 24:38.620. Je n'ai aucune idée de ce que cela signifie, mais je pense que c'est dû au fait que je ne réagis pas correctement au changement d'écran.

Ensuite, je reçois un message de débogage que je me suis imprimé à partir de ma propre méthode surfaceChanged() sur les nouvelles dimensions de surface.

Ensuite, j'imprime le message de débogage sur la question de savoir si Flies null. flies est le domaine qui finit par provoquer NullPointerException. Il est créé une fois, et jamais écrit à nouveau pour le reste du programme. Je sais que ce n'était pas nul avant l'accident, car il a été lu plusieurs fois.

Quelqu'un a-t-il une idée de la façon dont ma variable de membre privé est devenue nuls uniquement par ces indices?

J'inclurais du code mais il y en a beaucoup et je ne sais pas ce qui serait pertinent.

Était-ce utile?

La solution 2

Je l'ai corrigé en ajoutant ces deux lignes à la balise d'activité dans mon fichier manifeste

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

Cela indique que mon application gérera les modifications du clavier et de l'orientation en soi (en ne faisant rien) et préfère fonctionner tout le temps dans le paysage.

Autres conseils

Les changements d'orientation dans Android affectent l'état. Fondamentalement, votre activité est détruite et recréée. Vous devez donc être conscient de ce Cycle de vie Android Les événements seront appelés et comment sauver l'état.

Vous devez également vous méfier static instances et comment cela affecte ce cycle de vie.

Voici un article de blog expliquer une partie de cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top