繁体   English   中英

NullPointerExceptions仅在某些Samsung Galaxy设备上吗?

[英]NullPointerExceptions only on some Samsung Galaxy devices?

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

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

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

无论如何,根据我的Google Analytics(分析)崩溃报告,例如,尝试使用Module.dialogStyle创建Dialog时,我会随机获得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() null的唯一位置是在Module.disposeStyles()并且仅在应用程序的一个特定位置(最后)调用此函数。

我会假设这是我代码中的错误,即使95%的用户从未遇到过。 但是,所有5%确实经历过体验的人似乎都是Galaxy用户,而且我不确定这是否是巧合:

  • 银河S4
  • 银河S III
  • GALAXY Tab 3 lite

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

我将假设:

Module.dialogStyle

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

您可能会遇到Android如何管理JVM生命周期的副作用。 在某些情况下(尤其是在较大的设备上),将重新使用JVM实例可能会导致问题(例如,静态初始化程序已经运行,并且不会重新运行)。 另外, static指针可能从您的应用程序的上一次运行到下一次运行,并且可能具有无效或不正确的状态。 这取决于应用程序的组织方式。

如果您包含更多显示初始化静态字段的方式和时间的代码,我们很可能会弄清楚。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM