5

LunarLander我有一个仿照Google 示例的 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()有关新表面尺寸的信息。

然后我打印出有关苍蝇是否为null. flies是最终导致NullPointerException. 它创建一次,并且不再为程序的其余部分写入。我知道在崩溃之前它不是空的,因为它被读取了好几次。

有没有人知道我的私有成员变量是如何通过这些线索变为空的?

我会包含代码,但代码很多,我不知道什么是相关的。

4

2 回答 2

3

Android 中的方向变化会影响状态。基本上,您的活动被销毁并重新创建。因此,您必须了解将调用哪些Android 生命周期事件以及如何保存状态。

您还需要警惕static实例以及它如何影响此生命周期。

这是一篇博客文章,解释了其中的一些内容。

于 2010-02-01T07:13:09.940 回答
2

我通过将这两行添加到清单文件中的活动标记来修复它

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

这表示我的应用程序将自行处理键盘和方向更改(不做任何事情),并且更喜欢一直在横向运行。

于 2010-02-01T07:01:57.663 回答