NullPointerExceptions仅适用于某些三星Galaxy设备?

时间:2014-09-04 19:10:38

标签: java android nullpointerexception libgdx galaxy

我正在使用LibGDX。当我的应用程序启动时,它会创建一个屏幕。加载屏幕时,它会调用静态函数Module.createStyles()

此函数创建了一系列样式,这些样式将在整个应用程序的其余部分中使用(内置的LibGDX样式,如WindowStyle,LabelStyle,TextButtonStyle - 用于创建用户界面对象的所有类型的事物)。 / p>

屏幕完成后,会调用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 应为null。我将此字段设为空的唯一位置是Module.disposeStyles(),此函数仅在应用程序的一个特定位置(最后)调用。

我认为这是我的代码中的一个错误,尽管有95%的用户从未体验过它。然而,所有5%的人确实遇到过Galaxy用户,我不确定这是不是巧合:

  • Galaxy S4
  • Galaxy S III
  • GALAXY Tab 3 lite

有人有什么想法吗? Galaxy设备没有内置的RAM管理器吗?这会与此有关吗?

1 个答案:

答案 0 :(得分:4)

我将假设:

Module.dialogStyle

是对static类的Module属性的引用。

您可能会遇到Android管理JVM生命周期的副作用。有些场景(特别是在更大的设备上)会重新使用可能导致问题的JVM实例(例如,静态初始化器已经运行,并且不会重新运行)。或者,static指针可以从您之前的应用程序运行到下一个,并且可能在其中具有无效或不正确的状态。这取决于您的应用程序的组织方式。

如果您包含更多显示初始化静态字段的代码,我们可能会想出来。

有关不同生命周期以及如何在本地重现它们的更多详细信息,请参阅: http://bitiotic.com/blog/2013/05/23/libgdx-and-android-application-lifecycle/