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)

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!

40voto

Shoaib Ahmed Punkte 719

Dieses Problem tritt auf, wenn versucht wird, einen Dialog anzuzeigen, nachdem eine Aktivität beendet wurde.

Ich habe das Problem gelöst, indem ich einfach den folgenden Code geschrieben habe:

@Override
public void onDestroy(){
    super.onDestroy();
    if ( progressDialog!=null && progressDialog.isShowing() ){
        progressDialog.cancel();
    }
}

Im Grunde genommen, von welcher Klasse aus Sie den progressDialog gestartet haben, überschreiben Sie die onDestroy-Methode und machen es auf diese Weise. Damit wurde das Problem "Aktivität hat durchgesickertes Fenster" gelöst.

22voto

Tushar Punkte 1220

Ich habe kürzlich dasselbe Problem gehabt.

Der Grund für dieses Problem liegt darin, dass die Aktivität geschlossen wird, bevor der Dialog geschlossen ist. Es gibt verschiedene Gründe, warum dies geschehen kann. Die oben genannten Gründe in den vorherigen Beiträgen stimmen ebenfalls.

Ich bin in eine Situation geraten, weil ich in dem Thread eine Funktion aufgerufen habe, die eine Ausnahme ausgelöst hat. Dadurch wurde das Fenster geschlossen und somit die Ausnahme verursacht.

20voto

sandy Punkte 3456

Dies könnte helfen.

if (! isFinishing()) {

    dialog.show();

    }

19voto

Muhammad Aamir Ali Punkte 19629

Dialog schließen, wenn die Aktivität zerstört wird

@Override
protected void onDestroy()
{
    super.onDestroy();
    if (pDialog!=null && pDialog.isShowing()){
        pDialog.dismiss();
    }
}

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