Η δραστηριότητα έχει διαρρεύσει το παράθυρο που είχε αρχικά προστεθεί

Τι είναι αυτό το σφάλμα και γιατί συμβαίνει;

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() στην περίπτωση Dialog που δημιουργήσατε πριν από την έξοδο από το Δραστηριότητα, π.χ. στην onPause() ή στην onDestroy()

Σχόλια (7)

Η λύση είναι να καλέσετε την εντολή dismiss() στο Dialog που δημιουργήσατε στο viewP.java:183 πριν την έξοδο από τη δραστηριότητα, π.χ. στην εντολή onPause(). Όλα τα Windows&Dialogs θα πρέπει να κλείνουν πριν από την έξοδο από μια Activity.

Σχόλια (2)

Εάν χρησιμοποιείτε το AsyncTask, πιθανώς αυτό το μήνυμα καταγραφής μπορεί να είναι παραπλανητικό. Αν κοιτάξετε στο ημερολόγιό σας, μπορεί να βρείτε ένα άλλο σφάλμα, πιθανότατα στη μέθοδο doInBackground() της AsyncTask σας, που κάνει την τρέχουσα Activity σας να εκραγεί, και έτσι μόλις η AsyncTask επιστρέψει... καλά, τα υπόλοιπα τα ξέρετε. Κάποιοι άλλοι χρήστες το έχουν ήδη εξηγήσει αυτό εδώ :-)

Σχόλια (2)