&引用;这里有点不对劲,不是吗;“我不希望恢复一揽子计划”;android Logcat中的错误

&引用;这里有点不对劲,不是吗;“我不希望恢复一揽子计划”;android Logcat中的错误,android,crash,orientation,nullpointerexception,logcat,Android,Crash,Orientation,Nullpointerexception,Logcat,我有一个Android应用程序,它模仿了谷歌的LunarLander示例。我正在一台真正的设备上调试它,(motoroladroid)和android2.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

我有一个Android应用程序,它模仿了谷歌的
LunarLander
示例。我正在一台真正的设备上调试它,(
motoroladroid
)和
android2.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
让我担心的第一行是
24:38.620
的“这里出了什么问题”
。我不知道这意味着什么,但我认为这是因为我没有对屏幕的变化做出正确的反应

接下来,我从自己的方法
surfaceChanged()
中得到一条关于新曲面尺寸的调试消息

然后我打印出关于flies是否为
null
的调试消息
flies
是最终导致
NullPointerException
的字段。它只创建了一次,并且在程序的其余部分中从未再次写入。我知道它在崩溃之前不是空的,因为它被读取了好几次

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


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

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

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

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

Android中的方向更改会影响状态。基本上,您的活动被销毁并重新创建。因此,您必须知道将调用什么事件以及如何保存状态

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


解释其中一些。

这可能是应用程序的解决方案,具体取决于您的使用情况。在我看来,这是一种粗鲁的行为,迫使用户做出他可能不喜欢的使用行为。。。