1298 Stimmen

Die Aktivität hat das Fenster geleakt, das ursprünglich hinzugefügt wurde.

Was ist dieser Fehler und warum tritt er auf?

05-17 18:24:57.069: ERROR/WindowManager(18850): Activity com.mypkg.myP hat das Fenster com.android.internal.policy.impl.PhoneWindow$DecorView@44c46ff0 ausgelaufen, das ursprünglich hier hinzugefügt wurde
05-17 18:24:57.069: ERROR/WindowManager(18850): android.view.WindowLeaked: Activity ccom.mypkg.myP hat das Fenster com.android.internal.policy.impl.PhoneWindow$DecorView@44c46ff0 ausgelaufen, das ursprünglich hier hinzugefügt wurde
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.view.ViewRoot.(ViewRoot.java:231)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.view.Window$LocalWindowManager.addView(Window.java:424)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.app.Dialog.show(Dialog.java:239)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei com.mypkg.myP$PreparePairingLinkageData.onPreExecute(viewP.java:183)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.os.AsyncTask.execute(AsyncTask.java:391)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei com.mypkg.myP.onCreate(viewP.java:94)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.app.ActivityThread.access$2200(ActivityThread.java:126)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.os.Handler.dispatchMessage(Handler.java:99)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.os.Looper.loop(Looper.java:123)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei android.app.ActivityThread.main(ActivityThread.java:4595)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei java.lang.reflect.Method.invokeNative(Native Method)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei java.lang.reflect.Method.invoke(Method.java:521)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-17 18:24:57.069: ERROR/WindowManager(18850):     bei dalvik.system.NativeStart.main(Native Method)

1721voto

Alex Volovoy Punkte 66760

Sie versuchen, einen Dialog anzuzeigen, nachdem Sie eine Aktivität verlassen haben.

[EDIT]

Diese Frage ist eine der Top-Suchen bei Google für Android-Entwickler, deshalb füge ich ein paar wichtige Punkte aus den Kommentaren hinzu, die zukünftigen Forschern helfen könnten, ohne tief in die Kommentarkonversation einzusteigen.

Antwort 1 :

Sie versuchen, einen Dialog anzuzeigen, nachdem Sie eine Aktivität verlassen haben.

Antwort 2

Dieser Fehler kann unter bestimmten Umständen etwas irreführend sein (obwohl die Antwort immer noch vollkommen korrekt ist) - z.B. in meinem Fall wurde eine unbehandelte Ausnahme in einem AsyncTask geworfen, die dazu führte, dass die Aktivität beendet wurde, dann verursachte ein offener Fortschrittsdialog diese Ausnahme... also war die 'echte' Ausnahme etwas früher im Log

Antwort 3

Rufen Sie dismiss() auf der Dialoginstanz auf, die Sie erstellt haben, bevor Sie Ihre Aktivität verlassen, z.B. in onPause() oder onDestroy()

424voto

molnarm Punkte 9715

Die Lösung besteht darin, dismiss() auf dem Dialog aufzurufen, den Sie in viewP.java:183 erstellt haben, bevor Sie die Activity verlassen, z.B. in onPause(). Alle Windows&Dialogs sollten vor dem Verlassen einer Activity geschlossen werden.

115voto

ggomeze Punkte 5623

Wenn Sie AsyncTask verwenden, ist es wahrscheinlich, dass diese Protokollmeldung irreführend sein kann. Wenn Sie in Ihrem Protokoll nachschauen, finden Sie möglicherweise einen anderen Fehler, wahrscheinlich einen in Ihrer doInBackground()-Methode Ihres AsyncTask, der dazu führt, dass Ihre aktuelle Activity abstürzt, und somit wenn der AsyncTask zurückkommt.. nun, Sie kennen den Rest. Einige andere Benutzer haben das hier bereits erklärt :-)

80voto

Mark Phillip Punkte 1413

Ich habe diesen Fehler ausgelöst, indem ich versehentlich hide() anstelle von dismiss() bei einem AlertDialog aufgerufen habe.

65voto

Ruchir Baronia Punkte 7135

Die Antworten auf diese Frage waren alle korrekt, aber für mich etwas verwirrend, um tatsächlich zu verstehen warum. Nachdem ich ungefähr 2 Stunden lang herumgespielt habe, ist mir der Grund für diesen Fehler (in meinem Fall) eingefallen:

Du weißt bereits aus anderen Antworten, dass der Fehler X has leaked window DecorView@d9e6131[] bedeutet, dass ein Dialog geöffnet war, als deine App geschlossen wurde. Aber warum?

Es könnte sein, dass deine App aus einem anderen Grund abgestürzt ist, während dein Dialog geöffnet war

Dies führte dazu, dass deine App aufgrund eines Fehlers in deinem Code geschlossen wurde, was dazu führte, dass der Dialog gleichzeitig geöffnet blieb, als deine App aufgrund des anderen Fehlers geschlossen wurde.

Also, gehe deine Logik durch. Löse den ersten Fehler, und dann wird sich der zweite Fehler von selbst lösen Gib hier eine Bildbeschreibung ein

Ein Fehler verursacht einen anderen, der wiederum einen anderen verursacht, wie DOMINOS!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X