IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

AlertDialog & erreur "Activity has leaked window"


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut AlertDialog & erreur "Activity has leaked window"
    Hello!

    Je ne comprends pas qq chose à propos de cette erreur!

    Selon les infos que j'ai pu trouver sur différents site, cela arrive qd on essaye d'afficher qq chose:

    -> dans une activity fermée

    -> sur une progress bar en cours

    Mais dans mon cas, c'est pas ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
     
    try 
        {
            if (initUniqID() == -1)
            {           
                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
                alertDialogBuilder.setMessage(msgNetwork).setCancelable(false).setPositiveButton("OK", new DialogInterface.OnClickListener(){public void onClick(DialogInterface dialog, int id){finish();}});
                AlertDialog alert = alertDialogBuilder.create();
                alert.show();   
            }
     
     
            if (setConfig() == -1)
            {
                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
                alertDialogBuilder.setMessage("(setConfig) " + msgFailure).setCancelable(false).setPositiveButton("OK", new DialogInterface.OnClickListener(){public void onClick(DialogInterface dialog, int id){finish();}});
                AlertDialog alert = alertDialogBuilder.create();
                alert.show();
            }
        }
        catch (.......)
    LOGCAT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    11-09 15:04:20.510: E/WindowManager(29199): Activity com.test.Test2 has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40fa0238 that was originally added here
     
    11-09 15:04:20.510: E/WindowManager(29199): at com.test.Test2.onCreate(Test2.java:151)
    SYMPTOMES:
    Quand ej coupe le réseau, les 2 fcts doivent retourner -1 pour signaler une erreur, ok.

    Pour chaque retour, je veux informer l'utilisateur du soucis & terminer l'appli, ok.

    Le problème c'est qu'individuellement (en commentarisant l'autre) initUniqID() seule & setConfig() seule fonctionnent bien, mais les 2 ensembles, non!

    Je ne comprends donc pas pourquoi j'ai ce message d'erreur sur le alert.show() de initUniqID() (logcat) quand les 2 fcts sont actives ds mon source.

    -> iniUniqID() toute seule: son message d'alerte s'affiche bien

    -> setConfig() toute seule: son message d'alerte s'affiche bien

    -> les 2 ensembles: SEUL le MSG de setConfig() (le 2èmle donc, et pas le 1er!) s'affiche alors que iniUniqID() génère l'erreur du logcat!

    Pourquoi le MSG de iniUniqID() ne s'affiche pas?

    Une idée?
    Puisqu'à ce stade là, je n'ai pas quitté mon activité et que je n'ai pas non plus de progress bar en cours...

    Merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Et c'est TOUJOURS le 1er test qui pose problème avec le leak, si on inverse l'ordre des 2 fcts par exemple.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    On avance petit à petit:
    -> restons sur l'hypothèse initiale: d'abord initUniqID() et ensuite setConfig()
    -> code posté ci-dessus

    SI j'enlève le finish() du Onclick() de setConfig()
    ALORS
    => le message de setConfig() s'affiche
    => je valide OK, aucune action puisque j'ai viré le finish(), normal
    => et là apparait en dessous le message de initUniqID()(?????)

    Ce qui veut donc dire qu'il:
    -> affiche le MSG initUniqID() mais n'attend pas la réponse
    -> et réaffiche tout de suite, par dessus, le MSG setConfig()

    D'où l'erreur de leak puisque l'activité est fermée par le finish de setConfig() alors que le MSG de initUniqID() est toujours ouvert!

    DONC:
    1.) pourquoi n'attend-il pas la validation du 1er MSG avant d'afficher le 2ème???
    2.) et donc surtout comment remédier au problème?

    Je suppose que ça pourra intéresser d'autre débutants comme moi, parce que j'ai qd même mis 2 jours de tests en tout genre pour arriver à trouver ça!

    Merci.

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Aurais-je posé une colle aux spécialistes?

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Ce n'est pas une colle... tu essayes d'afficher deux boites de dialogue en même temps... affiche les juste l'une après l'autre...

    Comme tu perds l'objet "alert" tu n'as plus aucun moyen de faire un "dismiss" dessus => leaké...

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Non je ne les affiche pas en même temps (voir code), mais bien l'une après l'autre (si les 2 cdts sont remplies).

    Je ne capte pas là...

    -> j'affiche bien d'abord MSG1
    -> mais MSG2 couvre MSG1, sans attendre la validation de ce dernier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 13/10/2008, 18h07
  2. Réponses: 1
    Dernier message: 31/08/2007, 13h19
  3. Erreur IDE Delphi 7 sous Windows 2003
    Par dd16 dans le forum Delphi
    Réponses: 1
    Dernier message: 20/12/2006, 10h00
  4. erreur d'exécution '48' sur windows 98 SE
    Par florenzo28 dans le forum Windows 2000/Me/98/95
    Réponses: 1
    Dernier message: 18/02/2006, 22h27
  5. impossible d'activer pare-feu windows
    Par slim dans le forum Sécurité
    Réponses: 4
    Dernier message: 05/02/2006, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo