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 :

[Article Android] Thread, Handler, AsyncTask et fuites mémoires


Sujet :

Android

  1. #1
    Membre expert
    Avatar de MathiasSeguy
    Homme Profil pro
    Fondateur Android2EE - Formation Expertise Android
    Inscrit en
    Avril 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fondateur Android2EE - Formation Expertise Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 185
    Points : 3 692
    Points
    3 692
    Billets dans le blog
    6
    Par défaut [Article Android] Thread, Handler, AsyncTask et fuites mémoires
    Bonjour,
    J'ai le plaisir de vous présenter un tutoriel pour apprendre développement Android pour comprendre l'utilisation des Handlers et des AsyncTasks (Threads de traitement sous Android) et surtout comment éviter de générer des fuites mémoires dans vos applications:
    Thread, Handler, AsyncTask et fuites mémoires
    Cet article est associé à un ensemble de tutoriels, libres de téléchargements, vous présentant les différentes solutions expliquées dans l'article ainsi que certains démontrant la réalité des fuites mémoires.
    N'hésitez pas à poster vos commentaires, remarques et autres pensées concernant cet article dans ce topic, il est là pour ça.
    Bonne journée et bonne lecture.

  2. #2
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Très bon tutorial...

    Juste quelques remarques (anodines):

    Marrant, pour moi Thread c'est masculin... La traduction la plus proche étant "Fil d'éxecution".

    Un Handler peut etre associé à n'importe quel thread (à certaines conditions), et par défaut au thread qui l'a créé. Pas obligatoirement au Thread UI.

    Il y a une option d'appel du handler très pratique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    handler.send(new Runnable() {
       run() {
          ....
        }
    }
    Qui évite une gestion (parfois complexe) des messages coté Activity.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Sympa ce tutorial , arrivé 6 mois plutôt il m'aurait fait gagner pas mal de temps

    Dommage que HandlerThread ne soit pas abordé, c'est vraiment pratique pour gérer un thread et son handler.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre expert
    Avatar de MathiasSeguy
    Homme Profil pro
    Fondateur Android2EE - Formation Expertise Android
    Inscrit en
    Avril 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fondateur Android2EE - Formation Expertise Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 185
    Points : 3 692
    Points
    3 692
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Cool vos remarques.
    @nicroman: handler.send(new Runnable... ca a l'air pas mal c'est vrai
    @grunk: Ok, je vais essayer d'en faire un billet de blog. Je pense aussi que ça vaut le détour. (P'tet un petit article à voir)
    En tout cas merci tous les deux.

  5. #5
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut
    bonjour,
    très bon tutoriel, un peu pointu pour les pas trop avancés.
    Je décortique et modifie le code pour le faire tourner dans tous les sens et j'ai une question:
    comment un thread externe a t-il connaissance de l'objet handler déclaré dans le thread principal ?
    Je bloque.

    Merci.

  6. #6
    Membre expert
    Avatar de MathiasSeguy
    Homme Profil pro
    Fondateur Android2EE - Formation Expertise Android
    Inscrit en
    Avril 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fondateur Android2EE - Formation Expertise Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 185
    Points : 3 692
    Points
    3 692
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Tout d'abord si tu lis cet article http://alwin.developpez.com/tutorial/JavaThread/ tu verras que les Threads partagent leur mémoire. Dans les tutoriaux, le Handler appartient à l'activité qui déclare la Thread et le Runnable. Ainsi Runnable connait les objets de l'activité et donc connait le Handler.
    Ca c'était pour la partie "magie" du handler connu par le Runnable dans mes exemples.
    Mais une question reste ouverte: Comment je fais donc pour passer un handler à un Runnable qui ne le connait pas (un Runnable n'appartenant pas à l'activité) ?
    La réponse tient à la classe Messenger (http://developer.android.com/referen...Messenger.html) qui permet d'encapsuler un Handler et peut être envoyé dans le système via un Intent (et donc passé à une nouvelle brique applicative, un service par exemple) qui lui déclarera le runnable.
    ... Si tu veux que je creuse plus le sujet, relance moi

Discussions similaires

  1. Eviter une fuite mémoire sur un thread
    Par BuzzLeclaire dans le forum Langage
    Réponses: 9
    Dernier message: 03/11/2011, 11h06
  2. Thread, Service, AsyncTask, Handler?
    Par androidisme dans le forum Android
    Réponses: 8
    Dernier message: 31/08/2010, 13h25
  3. thread et "fuite mémoire"
    Par ChriGoLioNaDor dans le forum Threads & Processus
    Réponses: 18
    Dernier message: 17/03/2006, 00h00

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