【发布时间】:2014-10-29 15:58:04
【问题描述】:
我正在使用 LibGDX。当我的应用程序启动时,它会创建一个屏幕。当 Screen 被加载时,它会调用一个静态函数Module.createStyles()。
这个函数创建了一系列样式,这些样式将在应用程序的其余部分中使用(内置的 LibGDX 样式,如 WindowStyle、LabelStyle、TextButtonStyle - 用于创建用户界面对象的所有类型)。
屏幕完成后,它会调用Module.disposeStyles()。
无论如何,根据我的 Google Analytics(分析)崩溃报告,我在尝试使用 Module.dialogStyle 创建对话框时随机得到 NullPointerException:
ExitDialog exitDialog = new ExitDialog("Are you sure?", Module.dialogStyle);
Thread: GLThread 2089, Exception: java.lang.IllegalArgumentException: style cannot be null.
at package.Window.setStyle(Window.java:181)
at package.Window.<init>(Window.java:63)
at package.Dialog.<init>(Dialog.java:65)
at package.ExitDialog$1.<init>(ExitDialog.java:38)
Module.dialogStyle 绝对没有理由应该为空。我将该字段设为空的唯一位置是在Module.disposeStyles() 中,并且该函数仅在应用程序中的一个特定位置(在最后)调用。
我会认为这是我的代码中的一个错误,即使 95% 的用户从未体验过它。然而,所有 5% 的体验者似乎都是 Galaxy 用户,我不确定这是否是巧合:
- 银河 S4
- 银河 S III
- GALAXY Tab 3 lite
有人有什么想法吗? Galaxy 设备没有内置 RAM 管理器吗?会不会跟这个有关系?
【问题讨论】:
-
可能垃圾收集是新的,并且经过改进以成为 Galaxy 中最好的,因此该设备总是比竞争对手拥有更多的内存。在将上下文保存在全局字段中的代码中,我通常遇到问题(没有星系)。一旦这些被删除,许多问题就消失了。我也不再使用 onDispose onDestroy 我在 onStop 中进行所有清理。
-
不知道为什么你的风格在 Galaxy 设备上突然指向 null,如果不在这些设备上进行测试,可能很难弄清楚。您可以在创建对话框之前为样式添加一个空检查,对于空样式的情况,会触发 Google Analytics 事件并添加更多信息。 (并在没有对话框的情况下退出屏幕。。)这样至少用户不会真正注意到这个错误,你仍然可以继续跟踪它。
标签: java android nullpointerexception libgdx galaxy