“这里出了点问题,没想到PACKAGE会被恢复”在android Logcat中出错

我有一个Android应用程序,模仿Google的LunarLander示例.我正在使用Android 2.0在真实设备(Motorola Droid)上进行调试.当方向改变时,程序在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()中打印了关于新表面尺寸的消息.

然后我打印出关于苍蝇是否为空的调试消息.苍蝇是最终导致NullPointerException的字段.它创建了一次,并且从未为该程序的其余部分再次写入.我知道在崩溃之前它不是空的,因为它被多次阅读.

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

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

解决方法:

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

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

Here is a blog post解释了其中一些.

上一篇:android – Logcat日志警告/错误


下一篇:LogCat在Android中调用的计算成本是否昂贵?