我正在使用LibGDX。當我的應用程序啓動時,它會創建一個屏幕。當屏幕被加載時,它調用一個靜態函數Module.createStyles()
。僅在某些Samsung Galaxy設備上出現NullPointerExceptions?
該函數創建了一系列將在整個應用程序中使用的樣式(內置LibGDX樣式,如WindowStyle,LabelStyle,TextButtonStyle - 用於創建用戶界面對象的所有類型的東西)。
當屏幕完成時,它調用Module.disposeStyles()
。
總之,根據我的谷歌分析崩潰報告,我隨意嘗試,例如,創建一個對話框,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%似乎是銀河的用戶,我不知道這是一個巧合:
- 銀河S4
- 的Galaxy S III
- Galaxy Tab的3精簡版
任何人有任何想法?不要Galaxy設備有內置的RAM管理器?這與這有什麼關係?
大概垃圾收集是新的和改進是銀河系中最讓設備始終比競爭對手更多的RAM 。一般來說,我有問題(沒有銀河系),它將代碼保存在全局域中。一旦這些被刪除,許多問題就消失了。此外,我不再使用onDispose onDestroy,我在onStop中進行所有清理。 – danny117 2014-09-04 21:50:01
不知道爲什麼你的風格突然用Galaxy設備指向null,如果不在這些設備上測試它,可能很難弄清楚。您可以在創建對話框之前爲樣式添加空檢查,對於空樣式的情況,添加更多信息時觸發Google Analytics事件。 (並且沒有對話框退出屏幕..)這樣至少用戶沒有真正注意到這個錯誤,你仍然可以繼續跟蹤它。 – donfuxx 2014-09-04 22:28:21