L'attività ha perso la finestra che era stata originariamente aggiunta

Cos'è questo errore e perché succede?

05-17 18:24:57.069: ERROR/WindowManager(18850): Activity com.mypkg.myP has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44c46ff0 that was originally added here
05-17 18:24:57.069: ERROR/WindowManager(18850): android.view.WindowLeaked: Activity ccom.mypkg.myP has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44c46ff0 that was originally added here
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.view.ViewRoot.<init>(ViewRoot.java:231)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.Dialog.show(Dialog.java:239)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at com.mypkg.myP$PreparePairingLinkageData.onPreExecute(viewP.java:183)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.os.AsyncTask.execute(AsyncTask.java:391)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at com.mypkg.myP.onCreate(viewP.java:94)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.ActivityThread.access$2200(ActivityThread.java:126)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.os.Looper.loop(Looper.java:123)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.ActivityThread.main(ActivityThread.java:4595)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at java.lang.reflect.Method.invokeNative(Native Method)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at java.lang.reflect.Method.invoke(Method.java:521)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at dalvik.system.NativeStart.main(Native Method)
Soluzione

Stai cercando di mostrare una finestra di dialogo dopo che sei uscito da un'attività.

[EDIT]

Questa domanda è una delle prime ricerche su google per lo sviluppatore di Android, quindi Aggiungendo alcuni punti importanti dai commenti, che potrebbe essere più utile per il futuro investigatore senza andare in profondità della conversazione commento.

Risposta 1 :

Stai cercando di mostrare una finestra di dialogo dopo che sei uscito da un'attività.

Risposta 2

Questo errore può essere un po' fuorviante in alcune circostanze (anche se la risposta è ancora completamente accurata) - cioè nel mio caso una eccezione non gestita è stata lanciata in un AsyncTask, che ha causato la Activity a spegnersi, poi un progressdialog aperto ha causato questa eccezione... quindi la 'vera'eccezione era un po' prima nel log

Risposta 3

Chiama dismiss() sull'istanza di Dialog che hai creato prima di uscire dalla tua attività, ad esempio in onPause() o onDestroy()

Commentari (7)

La soluzione è chiamare dismiss() sulla Dialog che avete creato in viewP.java:183 prima di uscire dall'attività, per esempio in onPause(). Tutte le Windows&Dialogs dovrebbero essere chiuse prima di lasciare una Activitys.

Commentari (2)

Se state usando AsyncTask, probabilmente quel messaggio di log può essere ingannevole. Se cercate nel vostro log, potreste trovare un altro errore, probabilmente uno nel metodo doInBackground() del vostro AsyncTask, che sta facendo saltare la vostra attuale Activity, e quindi una volta che l'AsyncTask ritorna... beh, sapete il resto. Qualche altro utente lo ha già spiegato qui :-)

Commentari (2)