5

LunarLanderGoogleの例をモデルにしたAndroidアプリがあります。実際のデバイスで(Motorola Droid)を使用してデバッグしていAndroid 2.0ます。向きが変わると、プログラムはでクラッシュしNullPointerExceptionます。クラッシュ直前の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

私が心配している最初の行は"Something wrong here"にあり24:38.620ます。どういう意味かわかりませんが、画面の変化にきちんと反応しなかったせいかと思います。

surfaceChanged()次に、新しいサーフェスの寸法について、自分のメソッド内から自分で印刷したデバッグメッセージが表示されます。

次に、ハエがであったかどうかについてのデバッグメッセージを出力しますnullflies最終的にを引き起こすフィールドですNullPointerException。一度作成され、プログラムの残りの部分で再度書き込まれることはありません。何度か読み取られたので、クラッシュする前はnullではなかったことがわかります。

これらの手がかりだけで、私のプライベートメンバー変数がどのようにしてnullになったのか、誰かが手がかりを持っていますか?

コードを含めますが、コードはたくさんあり、何が関連するのかわかりません。

4

2 に答える 2

3

Androidでの向きの変更は、状態に影響します。基本的に、あなたの活動は破壊され、再作成されます。したがって、 Androidのライフサイクルイベントがどのように呼び出されるか、および状態を保存する方法を知っておく必要があります。

staticまた、インスタンスと、それがこのライフサイクルにどのように影響するかについても注意する必要があります。

これは、このいくつかを説明するブログ投稿です。

于 2010-02-01T07:13:09.940 に答える
2

マニフェストファイルのアクティビティタグにこれらの2行を追加して修正しました

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

これは、私のアプリケーションが(何もしないことで)キーボードと向きの変更を独自に処理し、常に横向きで実行することを好むことを示しています。

于 2010-02-01T07:01:57.663 に答える