Wat is deze fout, en waarom treedt hij op?
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)
Je'probeert een Dialoog te tonen nadat je'een Activiteit hebt verlaten.
[EDIT]
Deze vraag is een van de top zoekopdracht op google voor android ontwikkelaar, Daarom Toevoegen van enkele belangrijke punten uit opmerkingen, die misschien meer nuttig voor toekomstige onderzoeker zonder te gaan in de diepte van commentaar gesprek.
Antwoord 1 :
U're probeert een Dialoog te tonen nadat u'een Activiteit hebt verlaten.
Antwoord 2
Deze fout kan een beetje misleidend zijn in sommige omstandigheden (hoewel het antwoord nog steeds volledig accuraat is) - d.w.z. in mijn geval een unhandled Exception werd gegooid in een AsyncTask, die ervoor zorgde dat de Activity werd afgesloten, vervolgens veroorzaakte een open progressdialog deze Exception... dus de 'real' exception was een beetje eerder in het log
Antwoord 3
Roep dismiss() op bij de Dialog instantie die je hebt gemaakt voor het afsluiten van je Activity, b.v. in onPause() of onDestroy()
De oplossing is om dismiss()
op te roepen op de Dialog
die je hebt gemaakt in viewP.java:183
voordat je de Activiteit
verlaat, bijv. in onPause()
. Alle Window
s&Dialog
s moeten gesloten worden voordat je een Activity
verlaat.
Als je AsyncTask
gebruikt, kan die log melding misleidend zijn. Als je in het logboek kijkt, kun je een andere fout vinden, waarschijnlijk een in de doInBackground()
methode van je AsyncTask
, die ervoor zorgt dat je huidige Activity
wordt opgeblazen, en dus als de AsyncTask
terugkomt... nou ja, je kent de rest. Sommige andere gebruikers hebben dat hier al uitgelegd :-)