1255 votes

L'activité de fuite de la fenêtre qui a été ajoutée

Qu'est-ce que cette erreur, et pourquoi se produit-il?

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)

1663voto

Alex Volovoy Points 34562

Vous essayez d'afficher une boîte de Dialogue après que vous avez quitté une Activité.

419voto

Márton Molnár Points 5258

La solution est d'appeler dismiss() sur le Dialogue que vous avez créé dans viewP.java:183 avant de quitter l'Activité, par exemple, en onPause(). Toutes les fenêtres et boîtes de dialogue doit être fermé avant de quitter une Activité.

113voto

ggomeze Points 3024

Si vous utilisez AsyncTask, probablement que le message de log peuvent être trompeuses. Si vous regardez dans votre journal, vous pourriez trouver une autre erreur, probablement dans votre doInBackground() méthode de AsyncTask, qui est de faire de votre actuel Activity pour sauter, et ainsi, une fois la AsyncTask revient.. eh bien, vous savez le reste. Certains autres utilisateurs déjà expliqué ici :-)

75voto

Mark Phillip Points 719

J'ai déclenché cette erreur par erreur l'appelant hide() au lieu de dismiss() sur AlertDialog.

62voto

Adrian Romanelli Points 686

Vous pouvez obtenir cette exception par juste un simple/erreur stupide, par (par exemple) accidentellement l'appel de finition() après avoir affiché une AlertDialog, si vous oubliez de prendre une pause de l'instruction d'appel dans une instruction switch...

   @Override
   public void onClick(View v) {
    switch (v.getId()) {
        case R.id.new_button:
            openMyAlertDialog();
            break; <-- If you forget this the finish() method below 
                       will be called while the dialog is showing!
        case R.id.exit_button:
            finish();
            break;
        }
    }

Le finish() méthode proche de l'Activité, mais l'AlertDialog est toujours affichée!

Ainsi, lorsque vous êtes regarder attentivement le code, à la recherche de mauvais problèmes de threading ou complexe de codage et de ces, ne perdez pas de vue la forêt pour les arbres. Parfois, il peut être juste quelque chose d'aussi simple et bête comme un manque d'instruction break. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X