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 :

L'UI thread, principes de base pour interagir convenablement avec celui-ci [Tutoriel]


Sujet :

Android

  1. #1
    Membre confirmé

    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 81
    Points : 588
    Points
    588
    Par défaut L'UI thread, principes de base pour interagir convenablement avec celui-ci
    Bonjour,

    Voici un article dédié à l'UI thread

    http://davy-leggieri.developpez.com/...oid/ui-thread/

    I. Introduction
    II. Le fonctionnement de l'UI thread
    III. Le responsable de l'affichage et des interactions avec l'utilisateur
    IV. Un thread à préserver
    V. Où mettre les instructions consommatrices en temps ?
    VI. Ordonner des tâches à l'UI thread
    VI-A. Ordonner depuis l'activity
    VI-B. Ordonner depuis une view
    VI-C. Ordonner grâce à un handler
    VI-D. Ordonner grâce à une AsyncTask
    VII. Conclusion
    VIII. Remerciements

    Vos remarques sont les bienvenues.

  2. #2
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Franchement ton article est bien venu au bon moment quand même pour moi.
    Car je suis en mode avancé sur les thread donc ton article completera l'ancien sur le thread.

    Par ailleurs moi aussi je cherche à contribuer à un article sur la realité augmentée. Donc je sais pas comment ecrire un tutorial comme pour toi

  3. #3
    Membre confirmé

    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 81
    Points : 588
    Points
    588
    Par défaut
    Salut jahbromo,

    Je sui ravi que mon article puisse t'aider.
    Si tu désires écrire un article, il te suffit d'ouvrir un topic ici : http://www.developpez.net/forums/f19...va/contribuez/

    Les responsables viendront en parler avec toi. Une fois ton article finalisé au format Word ou simple texte, un compte rédacteur te sera ouvert.

    Je te souhaite bonne chance, et @ très bientôt pour une relecture technique.

    (La réalité augmenté me tente bien je me plongerai dans ce sujet cet été...)

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Points : 100
    Points
    100
    Par défaut
    merci pour l ' article ^^

  5. #5
    Membre averti Avatar de _Xavier_
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2009
    Messages : 311
    Points : 390
    Points
    390
    Par défaut
    Salut bydavy

    Merci pour ton article intéressant et très intuitif.
    Il y a pas mal de développeurs Java, avec leurs mauvaises habitudes , qui s'intéressent à Android, et c'est bien d'insister sur les bonnes pratiques à adopter pour éviter d'exploser les mobiles dont les ressources sont très limitées.

    une question : C'est quoi la différence entre mettre du code dans un thread classique (exemple §V) et le mettre dans le thread de l'UI (exemple VI-A) ?

  6. #6
    Membre confirmé

    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 81
    Points : 588
    Points
    588
    Par défaut
    La différence est très simple.
    L'UI thread sert à impacter l'interface graphique et les autres threads font tout le reste, et je rajouterai même qu'ils font surtout les opérations consommatrices en temps.

    Cependant, rien ne t'empêche de créer un thread qui va exécuter une opération consommatrice en temps et dont la finalité va être de déposer un Runnable dans l'UI thread dans l'intention de modifier l'interface graphique.
    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
    25
    26
    27
     
    public class TestActivity extends Activity {
        ...
        public void onCreate(Bundle savedInstanceState) {
            //Code executé dans le thread principal
            super.onCreate(savedInstanceState);
            ...
            //On lie une action au bouton
            unButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Création et exécution d'un nouveau thread
                    new Thread(new Runnable() {
                		@Override
                		public void run() {
                    		// Instructions consommatrices en temps
                    		// Et pour finir, déposer un Runnable dans l'UI Thread
                    		post(new Runnable(){
                    		     //Executé par l'UI thread 
                    		     //Ex: modifier un TextView
                    		});
                		}
                    }).start();
            }
        }
        ...
    }
    Petite précision:
    • L'UI thread: ce thread est dédié à l'affichage et à intercepter les actions de l'utilisateur;
    • Les autres thread: ils servent à tout.


    Donc, partant de ce constat, il faut utiliser l'UI thread uniquement ce pour quoi il est fait, c'est à dire de l'affichage et non des gros traitements sous peine de figer l'affichage le temps du calcul.

  7. #7
    Membre confirmé

    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 81
    Points : 588
    Points
    588
    Par défaut
    Dans mon exemple, le code se déroule selon l'ordre suivant:
    • Le UI Thread, executant le code de l'activity, va créer un nouveau thread;
    • Le nouveau thread va exécuter son opération consommatrice en temps;
    • Le nouveau thread va déposer le runnable dans l'UI thread;
    • L'UI thread va exécuter le runnable.


    En espérant t'avoir aidé !

  8. #8
    Membre averti Avatar de _Xavier_
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2009
    Messages : 311
    Points : 390
    Points
    390
    Par défaut
    Donc, partant de ce constat, il faut utiliser l'UI thread uniquement ce pour quoi il est fait, c'est à dire de l'affichage et non des gros traitements sous peine de figer l'affichage le temps du calcul.
    D'accord je vois mieux.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 37
    Points
    37
    Par défaut
    Pourquoi certains tutoriels ne sont pas visibles sur la page principale des tutoriels d'Android, celui-ci notamment ?

  10. #10
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Les mises à jours vont se faire prochainement
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  11. #11
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Bonjour,

    J'ai vu sur certain forum qu'il était déconseillé d'utiliser les threads dans une application Android. A la place ils préconise d'utiliser les services pour les taches longues.

    Ce tuto est-il encore valable avec les nouvelles versions d'android ?

    Ou alors ce conseille est donné parce que comme en Swing, la plupart des développeurs n'ont pas conscience du fonctionnement de l'UITread ? Et donc du coup l'utilisation de services force à utiliser des bonnes pratiques ?

  12. #12
    Membre confirmé

    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 81
    Points : 588
    Points
    588
    Par défaut
    Salut atha2,

    Ce tutoriel est toujours d'actualité et comme souvent en informatique il n'y a pas de réponse parfaite à ta question cela dépend de ton projet, tes besoins, etc. Mais je vais essayer d'éclaircir ta vision de ces deux éléments pour que tu comprennes mieux quand utiliser l'un ou l'autre.

    Le thread :
    • Il est un moyen d'executer un travail coûteux en arrière plan(comprend en dehors du main thread)


    Le service (d'après la documentation officielle):
    • Un service n'est pas un thread. Ce n'est pas en soit un moyen pour exécuter un travail coûteux hors du main thread (pour éviter l'écran d'erreur "Application Not Responding")
    • Un moyen utilisé par l'application pour prévenir le système qu'on désire exécuter quelque chose en arrière plan (et celà même si ce n'est pas explicitement demandé par une action de l'utilisateur). Le service va s'exécuter jusqu'à ce qu'il se termine où que quelqu'un lui demande explicitement de se terminer.
    • Un moyen d'exposer des fonctionnalités à d'autres applications. (Souvent recours à Context.bindService() et donc une communication s'inscrivant dans le temps).


    Maintenant dans la pratique si tu veux faire une petite requête web pour compléter ton affichage, on utilise souvent un thread. Si tu veux créer quelque chose qui va questionner un serveur web toutes les 3h, c'est plutôt un service qu'il te faut.

    J'espère que ça t'éclaire.

  13. #13
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Merci bien pour ces éclaircissements !
    Donc au final c'est la même chose que sous Windows

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 18
    Points
    18
    Par défaut
    J'ai une question qui peut paraitre légèrement hors sujet mais qui est totalement dans le thème j'ai une application qui montre deux web view en même temps ses deux web view montre des flash

    Elles sont gérer dans mon UI Thread mais cela ram , sachant que je ne veut pas des interaction avec celle ci mais juste les afficher

    Puis je faire une des webview dans un thread separer de l'UI thread?
    Ou comme je semble l’avoir compris il est impossible de faire de l'affichage dans un autre thread?

  15. #15
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Je ne pense pas la seule solution que je peux te donner c'est laisse soit tombé le flash soit les deux WebView .
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  16. #16
    Membre confirmé

    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 81
    Points : 588
    Points
    588
    Par défaut
    Salut Jebik,

    Je ne me souviens plus des détails de l'implémentation des webviews mais elles sont déjà optimisées et utilisent plusieurs threads (chargement de données à partir d'Internet, composition de la page web, affichage, etc).
    Je pense que ton problème vient d'ailleurs et principalement du flash. C'est une technologie mourante et plus disponible depuis ICS. Mon conseil serait de repartir de zéro, de te poser la question de tes besoins et revoir tes options pour l'implémentation.

Discussions similaires

  1. Recherche aide pour interagir avec ma base de donnée en c#
    Par m0h4m3d dans le forum Windows Forms
    Réponses: 5
    Dernier message: 24/04/2014, 19h49
  2. utiliser le thread principal pour créer un usercontrol
    Par Gui4257 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 21/08/2012, 19h25
  3. Réponses: 0
    Dernier message: 25/07/2011, 16h53
  4. principes de base pour débutant
    Par frkdavid dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 27/02/2010, 10h41
  5. [Threads]Comment les organiser pour un jeu du serpent ?
    Par Pill_S dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 11/05/2004, 15h22

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