Question L'activité a fui la fenêtre qui a été ajoutée à l'origine


Quelle est cette erreur, et pourquoi cela arrive-t-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)

933
2018-05-17 15:51


origine


Réponses:


Vous essayez d'afficher une boîte de dialogue après avoir quitté une activité.

[MODIFIER]

Cette question est l'une des meilleures recherches sur google pour développeur Android, Par conséquent, ajouter quelques points importants à partir des commentaires, ce qui pourrait être plus utile pour le futur enquêteur sans entrer dans la profondeur de la conversation de commentaire.

Réponse 1 :

Vous essayez d'afficher une boîte de dialogue après avoir quitté une activité.

Réponse 2 

Cette erreur peut être un peu trompeuse dans certaines circonstances   la réponse est tout à fait exacte) - c'est-à-dire dans mon cas   Exception non gérée a été lancée dans une asyncTask, qui a provoqué la   Activité à arrêter, puis un dialogue de progression ouvert a provoqué cette   Exception .. de sorte que la «vraie» exception était un peu plus tôt dans le journal

Réponse 3 

Appelez dismiss () sur l'instance Dialog que vous avez créée avant de quitter   Activité, par ex. dans onPause () ou onDestroy ()


1266
2018-05-17 15:54



La solution consiste à appeler dismiss() sur le Dialog vous avez créé dans viewP.java:183 avant de quitter Activity, par exemple. dans onPause(). Tout Windows &Dialogs devrait être fermé avant de quitter Activity.


370
2018-05-17 18:50



Si vous utilisez AsyncTask, probablement ce message de journal peut être trompeur. Si vous regardez dans votre journal, vous pourriez trouver une autre erreur, probablement une dans votre doInBackground() méthode de votre AsyncTask, c'est faire votre courant Activity à exploser, et donc une fois le AsyncTask revient .. eh bien, vous connaissez le reste. D'autres utilisateurs ont déjà expliqué cela ici :-)


100
2017-07-20 18:23



Vous pouvez obtenir cette exception simplement par une erreur simple / stupide, en (par exemple) en appelant accidentellement finish() après avoir affiché un AlertDialog, si vous manquez une déclaration d'appel de pause dans une déclaration de commutateur ...

   @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 va fermer le Activity, mais le AlertDialog est toujours affiché!

Donc, lorsque vous observez attentivement le code, en recherchant de mauvais problèmes de filetage ou de codage complexe, ne perdez pas de vue la forêt pour les arbres. Parfois, il peut être juste quelque chose d'aussi simple et stupide qu'une déclaration de rupture manquante. :)


52
2017-10-08 08:48



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


48
2017-12-07 19:29



Ce problème se produit lorsque vous essayez d'afficher une boîte de dialogue après avoir quitté une activité.

Je viens de résoudre ce problème en écrivant simplement le code suivant:

@Override
public void onDestroy(){
    super.onDestroy();
    if ( progressDialog!=null && progressDialog.isShowing() ){
        progressDialog.cancel();
    }
}

Fondamentalement, à partir de quelle classe vous avez démarré progressDialog, substituez la méthode onDestroy et faites comme ceci. Il a résolu le problème "L'activité a fui la fenêtre".


27
2017-08-30 06:55



J'ai récemment fait face au même problème.

La raison de ce problème est que l'activité est fermée avant que la boîte de dialogue ne soit fermée. Il y a plusieurs raisons pour que cela se produise. Ceux mentionnés dans les messages ci-dessus sont également corrects.

Je me suis mis dans une situation, parce que dans le fil, j'appelais une fonction qui jetait l'exception. À cause de quoi la fenêtre était rejetée et donc l'exception.


19
2017-12-08 21:12



J'avais le même message d'erreur obscur et je n'avais aucune idée pourquoi. Étant donné les indices des réponses précédentes, j'ai changé mes appels non-GUI en mDialog.finish () pour être mDialog.dismiss () et les erreurs ont disparu. Cela n'affectait pas le comportement de mon widget mais il était déconcertant et aurait pu signaler une fuite de mémoire importante.


11
2018-03-27 05:49