Дейността има прозорец, който е бил първоначално добавен

Каква е тази грешка и защо се появява?

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)
Решение

Опитвате се да покажете диалогов прозорец, след като сте излезли от дадена дейност.

[EDIT]

Този въпрос е един от най-търсените в Google за разработчик на Android, затова добавям няколко важни точки от коментарите, които могат да бъдат по-полезни за бъдещия изследовател, без да се задълбочаваме в разговора в коментарите.

Отговор 1 :

Опитвате се да покажете диалогов прозорец, след като сте излезли от дадена дейност.

Отговор 2

Тази грешка може да бъде малко подвеждаща при някои обстоятелства (въпреки че отговорът все още е напълно точен) - т.е. в моя случай необработеното изключение беше хвърлено в AsyncTask, което предизвика Дейността се изключи, а след това отвореният диалог за напредъка причини това Изключение.. така че 'истинското' изключение беше малко по-рано в дневника

Отговор 3

Извикайте dismiss() на инстанцията на диалога, която сте създали, преди да излезете от вашия дейност, например в onPause() или onDestroy()

Коментари (7)

Решението е да извикате dismiss() на Dialog, който сте създали в viewP.java:183, преди да излезете от Activity, например в onPause(). Всички прозорци&Dialog трябва да бъдат затворени, преди да напуснете дадена дейност.

Коментари (2)

Ако използвате AsyncTask, вероятно това съобщение в дневника може да е измамно. Ако погледнете нагоре в дневника, може да откриете друга грешка, вероятно такава в метода doInBackground() на вашата AsyncTask, която кара текущата ви Activity да се взриви и по този начин, след като AsyncTask се върне... е, знаете останалото. Някои други потребители вече обясниха това тук :-)

Коментари (2)