Ich benutze LibGDX. Wenn meine App gestartet wird, wird ein Bildschirm erstellt. Wenn der Bildschirm geladen ist, wird eine statische Funktion Module.createStyles()
aufgerufen.NullPointerExceptions nur auf einigen Samsung Galaxy-Geräten?
Diese Funktion erstellt eine Reihe von Stilen, die im gesamten Rest der Anwendung verwendet werden (integrierte LibGDX-Stile wie WindowStyle, LabelStyle, TextButtonStyle - alle Arten von Dingen, die zum Erstellen der Benutzeroberflächenobjekte verwendet werden). Wenn der Bildschirm fertig ist, ruft er Module.disposeStyles()
auf.
Wie auch immer, nach meiner Google Analytics Crash-Berichte, erhalte ich zufällig einen Nullpointer wenn sie versuchen, zum Beispiel erstellen, einen Dialog mit Module.dialogStyle:
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)
Es gibt absolut keinen Grund Module.dialogStyle sollte null sein. Die einzige Stelle, an der ich dieses Feld auf Null setze, ist Module.disposeStyles()
, und diese Funktion wird nur an einer bestimmten Stelle in der Anwendung aufgerufen (ganz am Ende).
Ich würde annehmen, dass dies ein Fehler in meinem Code war, obwohl 95% der Benutzer es nie erleben. Doch alle 5%, die es erleben scheinen Galaxy Benutzer zu sein und ich bin mir nicht sicher, ob das ein Zufall:
- Galaxy S4
- Galaxy S III
- GALAXY Tab 3 lite
Wer hat irgendwelche Ideen? Haben Galaxy-Geräte keinen eingebauten RAM-Manager? Hätte das etwas damit zu tun?
Wahrscheinlich die Garbage-Collection neu und verbesserte das Beste in der Galaxie zu sein, so dass immer das Gerät mehr RAM als die Konkurrenz hat . Ich hatte Probleme im Allgemeinen (habe keine Galaxie) in Code, der den Kontext in einem globalen Feld speichert. Sobald diese entfernt wurden, verschwanden viele Probleme. Außerdem benutze ich onDispose onDestroy nicht mehr. Ich mache alle Aufräumarbeiten in onStop. – danny117
Ich bin mir nicht sicher, warum Ihr Stil bei Galaxy-Geräten plötzlich auf null gesetzt hat, und es könnte schwierig sein, es herauszufinden, ohne es auf diesen Geräten zu testen. Sie können vor dem Erstellen des Dialogfelds eine Nullprüfung für den Stil hinzufügen und für den Fall eines Nullstils ein Google Analytics-Ereignis mit weiteren hinzugefügten Informationen auslösen. (und den Bildschirm ohne Dialog verlassen ..) Auf diese Weise bemerken zumindest die Benutzer den Fehler nicht wirklich und Sie können ihn weiterhin verfolgen. – donfuxx