Čo je to za chybu a prečo sa vyskytuje?
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)
Snažíte sa zobraziť dialógové okno po ukončení aktivity.
[EDIT]
Táto otázka je jednou z najvyhľadávanejších na Googli pre vývojárov Androidu, preto pridávam niekoľko dôležitých bodov z komentárov, ktoré by mohli byť užitočnejšie pre budúceho riešiteľa bez toho, aby som musel ísť do hĺbky konverzácie v komentároch.
Odpoveď 1 :
Snažíte sa zobraziť dialógové okno po ukončení aktivity.
Odpoveď 2
Táto chyba môže byť za určitých okolností trochu zavádzajúca (hoci odpoveď je stále úplne presná) - t. j. v mojom prípade sa neobsluhovaná výnimka bola vyhodená v úlohe AsyncTask, čo spôsobilo aktivitu vypnúť, potom otvorený dialóg o priebehu spôsobil toto Výnimka.. takže 'skutočná' výnimka bola v logu o niečo skôr
Odpoveď 3
Vyvolajte funkciu dismiss() na inštancii dialógu, ktorú ste vytvorili pred ukončením vášho Aktivity, napr. v onPause() alebo onDestroy()
Ak používate AsyncTask
, pravdepodobne môže byť táto správa v protokole zavádzajúca. Ak sa pozriete do logu, môžete nájsť inú chybu, pravdepodobne v metóde doInBackground()
vašej AsyncTask
, ktorá spôsobuje, že vaša aktuálna Activity
vybuchne, a tak po návrate AsyncTask
... no, zvyšok poznáte. Niektorí iní používatelia to tu už vysvetlili :-)