我有一个以下模型的Android应用 LunarLander Google的示例。我正在真实设备上调试它((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. 。它曾经创建过一次,并且从未为其其余的程序再写。我知道在坠机发生前它不是零,因为它已经读了几次。

有人知道我的私人成员变量如何仅仅因这些线索而变得无效?

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

有帮助吗?

解决方案 2

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

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

这说明我的应用程序将自己处理键盘和方向更改(通过什么都不做),并且更喜欢一直在景观中运行。

其他提示

Android的方向变化影响状态。基本上,您的活动被破坏和重新创建。因此,您必须意识到什么 Android生命周期 事件将被调用以及如何保存状态。

您还需要警惕 static 实例及其如何影响这一生命周期。

这是博客文章 解释其中的一些。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top