Android verhindern durchgesickerte Fenster
-
26-10-2019 - |
Frage
Während ich in meiner App Monkey -Tool ausführe, bekomme ich android.view.windowleaked Ausnahme, ich habe einige Stackoverflow -Threads verwiesen und festgestellt, dass wir vermeiden müssen Dies Beim Erstellen von Popups müssen wir stattdessen GetApplicationContext () verwenden, aber das verursacht dies BadTokenException
E/AndroidRuntime(5597): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
Nochmals nach dem Durchsuchen fand ich diese Antwort, die sagt
Eine Ursache für diesen Fehler kann darin bestehen, ein Anwendungsfenster/Dialog über einen Kontext anzuzeigen, der keine Aktivität ist
Wie kann ich das lösen?
Lösung
Normalerweise Fensterlecks, weil Sie nicht verwenden Showdialog Methode in Activity
aber nur benutze Dialog.show()
Methode.
Wenn ein Dialog angezeigt wird und Ihre Konfiguration Ihrer Activity
Änderungen (z. B. Änderung der Orientierungsänderung) Das Dialogfeld "Angefügt ist nicht zum Anbringen des Fensters.
Wenn du benutzt Kompatibilitätsbibliothek Du solltest benutzen Dialogfragment statt rein dialog
.
Andere Tipps
der Grund dahinter WindowManager$BadTokenException
ist, dass Sie immer wieder zeigen dialog
oder popupwindow
Auf dem Fenster, dessen Kontext jetzt nicht lebt.
Sollte das Popup oder Dialog immer dann abweisen, wenn Sie zwischen Aktivitäten wechseln oder Aktivitäten abweisen.
Daher sollten Sie wahrscheinlich Dilog.dismiss () in der OnPause -Methode aufrufen.
onPause()
{
dilog.dismiss()
}