&引用;这里有点不对劲,不是吗;“我不希望恢复一揽子计划”;android Logcat中的错误
我有一个Android应用程序,它模仿了谷歌的&引用;这里有点不对劲,不是吗;“我不希望恢复一揽子计划”;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
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中的方向更改会影响状态。基本上,您的活动被销毁并重新创建。因此,您必须知道将调用什么事件以及如何保存状态 您还需要警惕
静态
实例以及它如何影响此生命周期
解释其中一些。这可能是应用程序的解决方案,具体取决于您的使用情况。在我看来,这是一种粗鲁的行为,迫使用户做出他可能不喜欢的使用行为。。。