2010-02-01 2 views
5

Ich habe eine Android-App nach dem Vorbild LunarLander Beispiel von Google. Ich debugge es auf einem echten Gerät, (Motorola Droid) mit Android 2.0. Wenn sich die Ausrichtung ändert, stürzt das Programm auf einem NullPointerException ab. Logcat von kurz vor Absturz:"Etwas falsch hier, nicht erwartet, dass PACKAGE fortgesetzt werden" Fehler in android Logcat

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 

Die erste Zeile, die mir Sorgen "Something wrong here" bei 24:38.620 ist. Ich habe keine Ahnung was es bedeutet, aber ich denke es liegt daran das ich nicht richtig auf den Bildschirmwechsel reagiere.

Als nächstes bekomme ich eine Debug-Nachricht, die ich selbst aus meiner eigenen Methode surfaceChanged() über die neuen Oberflächenmaße gedruckt habe.

Dann drucke ich Debug-Meldung darüber, ob Fliegen war null. flies ist das Feld, das schließlich die NullPointerException verursacht. Es wurde einmal erstellt und für den Rest des Programms nie wieder geschrieben. Ich weiß, dass es vor dem Absturz nicht null war, weil es mehrmals gelesen wurde.

Hat jemand eine Ahnung, wie meine private Mitgliedervariable nur durch diese Hinweise null wurde?

Ich würde Code enthalten, aber es gibt eine Menge davon und ich weiß nicht, was relevant wäre.

Antwort

2

ich es fest durch diese beiden Linien an den Aktivitäts-Tag in meinem Manifest-Datei hinzufügen

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

dies sagt, dass meine Anwendung Tastatur und Orientierungsänderungen auf einer eigenen (durch nichts zu tun) handhaben und laufen bevorzugt in der Landschaft die ganze Zeit.

+0

Dies ist möglicherweise eine Lösung für Ihre App, abhängig von Ihrem Anwendungsfall. Meiner Meinung nach ist dies ein unhöfliches Verhalten, das den Benutzer in ein Nutzungsverhalten zwingt, das er vielleicht nicht mag ... – Janusz

3

Orientierungsänderungen in Android beeinflussen den Status. Grundsätzlich wird Ihre Aktivität zerstört und neu erstellt. Sie müssen daher wissen, was Android lifecycle Ereignisse aufgerufen werden und wie Sie den Status speichern.

Sie müssen auch vorsichtig sein, static Instanzen und wie das betrifft diesen Lebenszyklus.

Here is a blog post erklären einige davon.

Verwandte Themen