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 :

Attendre la fin d'une AsyncTask


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Par défaut Attendre la fin d'une AsyncTask
    Bonjour,

    Je sais que d'un côté, une asynctask est faite pour ne "pas être syncronisé", mais est-il possible d'attendre la "fin" d'une asynctask ?

    Je m'explique plus en détails.
    Actuellement, pour ouvrir démarrer une activity, j'ai besoin de récupérer des données sur 4 pages web différentes.
    Jusqu'à maintenant, je n'avais qu'une asynctask qui traitait une page, puis l'autre... Mais, ne serait-ce pas mieux, plus rapide, d'avoir une asynctask par page (ou alors, deux qui traitent deux pages) ?
    Le problème, c'est que je ne vois pas (peut-être que ce n'est pas possible) comment faire une asynctask "principale" qui lance les trois autres, et attends leur fin pour continuer.


    Merci d'avance.

  2. #2
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Je sais qu'en JAVA, les thread adoptent les méthodes notify(), notifyAll(), wait() pour indiquer justement qu'un Thread a terminé son execution que qu'un autre peut continuer.

    Après je ne sais pas comment ça s'applique aux aSyncTask, mais peut être que ça peut t'aiguiller...

  3. #3
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Tu invoque la méthode qui va bien dans le onPostExecute() de ton AsyncTask ?
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Par défaut
    Citation Envoyé par Anduriel Voir le message
    Je sais qu'en JAVA, les thread adoptent les méthodes notify(), notifyAll(), wait() pour indiquer justement qu'un Thread a terminé son execution que qu'un autre peut continuer.

    Après je ne sais pas comment ça s'applique aux aSyncTask, mais peut être que ça peut t'aiguiller...
    J'y ai pensé aussi, un "join" aurait été sympatique.
    Il faudrait qu'à la fin de l'asynctask principale, il y ai autant de wait que d'asynctask du coup. Et je ne sais pas ce qui se passerait si une asynctask "secondaire" se termine avant que l'ascyntask principale n'éxécute le wait. (Il y a aussi des requêtes http dans l'asynctask principale).



    Citation Envoyé par Hizin
    Tu invoque la méthode qui va bien dans le onPostExecute() de ton AsyncTask ?
    Je redéfini cette onPostExecute() pour m'en servir, mais je ne vois pas de quelle méthode à invoquer tu parle par contre.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 64
    Par défaut
    Il me semble que tu peux faire un truc du genre:

    depuis l'UIThread. Ca te retourne le résultat de l'asynctask lorsqu'elle est terminée

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Je pensais à un truc : passer l'objet à l'AsyncTask, et à chaque onPostExecute, un appel à une méthode de la classe appelante "isAsyncFinish()" qui vérifie combien d'AsyncTask ont appelé la méthode, et soit incrémente le nombre d'appel, soit fait la suite.

    EDIT : Mais la solution proposée par Arno5788 est largement mieux, le get() attendant que l'AsyncTask se termine.

    Documentation : http://developer.android.com/referen...html#get%28%29
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Par défaut
    Faut vraiment que j'arrête de lire en diagonale la documentation, j'ai sauté cette méthode en voyant son nom (get, pas très parlant par rapport à un join, mais c'est finalement compréhensible vu que ça retourne la valeur en même temps).

    Merci pour vos réponses, je vais tester ça dès demain.

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

Discussions similaires

  1. Attendre la fin d'une AsyncTask
    Par Fuotmad dans le forum Android
    Réponses: 1
    Dernier message: 22/05/2015, 11h45
  2. Attendre la fin d'une popup
    Par maxattack dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/07/2007, 21h27
  3. [JFrame] Attendre la fin d'une autre fenêtre
    Par nicolas.pied dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/12/2005, 09h14
  4. Attendre la fin d'une action
    Par ederoeck dans le forum Access
    Réponses: 3
    Dernier message: 24/09/2005, 08h36
  5. [FLASH MX2004] Attendre la fin d'une anim
    Par stailer dans le forum Flash
    Réponses: 2
    Dernier message: 11/07/2005, 12h47

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