java – 仅在某些三星Galaxy设备上使用NullPointerExceptions?

前端之家收集整理的这篇文章主要介绍了java – 仅在某些三星Galaxy设备上使用NullPointerExceptions?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

这个函数创建了一系列样式,这些样式将在整个应用程序的其余部分使用(内置的LibGDX样式,如WindowStyle,LabelStyle,TextButtonStyle – 用于创建用户界面对象的所有类型的东西).

屏幕完成后,它会调用Module.disposeStyles().

无论如何,根据我的Google Analytics崩溃报告,我在尝试使用Module.dialogStyle创建一个Dialog时会随机获取NullPointerException:

ExitDialog exitDialog = new ExitDialog(“你确定吗?”,Module.dialogStyle);

Thread: GLThread 2089,Exception: java.lang.IllegalArgumentException: style cannot be null.
at package.Window.setStyle(Window.java:181)
at package.Window.

Module.dialogStyle绝对没有理由应该为null.我将此字段置空的唯一位置是在Module.disposeStyles()中,此函数仅在应用程序的一个特定位置(最后)调用.

我认为这是我的代码中的一个错误,尽管95%的用户从未体验过它.但是,所有5%的用户体验它似乎都是Galaxy用户,我不确定这是不是巧合:

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

有人有主意吗? Galaxy设备没有内置的RAM管理器吗?这会与此有关吗?

最佳答案
我会假设:

Module.dialogStyle

是对Module类的静态属性的引用.

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

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

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

猜你在找的Android相关文章