[英]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用户,而且我不确定这是否是巧合:
有人有想法么? 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.