0% ont trouvé ce document utile (0 vote)
16 vues6 pages

Thread Android

Le document traite de la gestion des threads dans les applications Android, mettant en avant l'importance du thread principal (UIThread) pour l'interface utilisateur et la nécessité d'utiliser des threads d'arrière-plan pour les opérations longues. Il présente des méthodes pour communiquer entre les threads, notamment avec runOnUiThread et Handler, ainsi que l'utilisation d'AsyncTask pour simplifier le traitement asynchrone. Un exemple d'implémentation d'AsyncTask est fourni, illustrant comment gérer les interactions avec l'interface utilisateur tout en effectuant des tâches en arrière-plan.

Transféré par

tokyo123japan456
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
16 vues6 pages

Thread Android

Le document traite de la gestion des threads dans les applications Android, mettant en avant l'importance du thread principal (UIThread) pour l'interface utilisateur et la nécessité d'utiliser des threads d'arrière-plan pour les opérations longues. Il présente des méthodes pour communiquer entre les threads, notamment avec runOnUiThread et Handler, ainsi que l'utilisation d'AsyncTask pour simplifier le traitement asynchrone. Un exemple d'implémentation d'AsyncTask est fourni, illustrant comment gérer les interactions avec l'interface utilisateur tout en effectuant des tâches en arrière-plan.

Transféré par

tokyo123japan456
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thread Android

1. Introduction
Chaque application Android a un thread principal nommé UIThread (User Interface
Thread) qui est en charge de : la gestion de l'interface utilisateur (y compris la mesure et le
dessin des vues), la coordination des interactions des utilisateurs et la réception des
événements du cycle de vie. S'il y a trop de travail sur ce fil, l'application semble se bloquer
ou ralentir, conduisant à une utilisation indésirable. Tous les calculs et opérations de longue
durée tels que le décodage d'une image bitmap, l'accès au disque ou l'exécution de requêtes
réseau doivent être effectués sur un thread d'arrière-plan distinct. En général, tout ce qui prend
plus de quelques millisecondes doit être délégué à un thread d'arrière-plan. Certaines de ces
tâches peuvent être nécessaires pendant que l'utilisateur interagit activement avec
l'application.

Chaque application a son propre thread spécial UIT qui exécute des objets d'interface
utilisateur tels que les objets View. Seuls les objets exécutés sur le thread d'interface
utilisateur ont accès à d'autres objets sur ce thread. Si vous lancer d’autres thread, elles n'ont
pas accès aux objets d'interface utilisateur. Pour déplacer des données d'un thread d'arrière-
plan vers le thread d'interface utilisateur, utilisez un gestionnaire Handler qui s'exécute sur le
thread d'interface utilisateur.

2. Implémentation des Thread :


Il existe deux façons de créer un nouveau thread d'exécution :
1. Methode1

2. Methode 2 :

3. Communication avec l’UIThread

Problème :
La manipulation des ressources utilisées par l’UIT peut provoquer des comportements
inattendus ou impossibles à prédire.
Solution1 :
La méthode d'activité void runOnUiThread(Runnable action) spécifie qu'une action doit
s'exécuter dans le thread UI. Si le thread actuel est le thread UI, alors l'action est exécutée
immédiatement. Sinon, l'action est ajoutée à la pile des évènements du thread UI

Solution2 :
Utiliser la classe handle qui offre une méthode handleMessage(Message msg) qui s’exécute
dans le UIThread. Puis invoquer cette méthode dans votre second thread.

Méthode invoquant la méthode handleMessage :

Exemple d’invocation :
4. Utiliser AsyncTask
AsyncTask est destiné à permettre une utilisation correcte et facile du thread d'interface
utilisateur. Une tâche asynchrone est définie par un calcul qui s'exécute sur un thread
d'arrière-plan et dont le résultat est publié sur le thread d'interface utilisateur. Une tâche
asynchrone est définie par 3 types génériques appelés Params, Progress et Result, et 4 étapes,
appelées onPreExecute, doInBackground, onProgressUpdate et onPostExecute.

C’est dans la méthode doInBackGround où on fait notre traitement de second processus.


Exemple :

1. public class AjoutTask extends AsyncTask<String,Integer,Boolean>


2. {
3. AlertDialog dialog;
4. [Link] build;
5. MainActivity con;
6. public AjoutTask(MainActivity con) {
7. [Link] = con;
8. }
9.
10. @Override
11. protected void onPreExecute() {
12. // UIThread
13. build=new [Link](con);
14. [Link]("Ajout");
15. [Link]("Veuillez patientez...");
16. dialog=[Link]();
17. [Link]();
18. }
19. String IP="[Link]";
20. /**
21. * avd: [Link]
22. * reseaul local (pc +tel): IPv4
23. * hebergement : [Link]
24. */
25. String url="[Link]
26.
27. @Override
28. protected Boolean doInBackground(String... strings) {
29. // recuperation des parametres du requetes
30. String param1=strings[0];
31. String param2=strings[1];
32. String param3=strings[2];
33. url+="?nom="+param1+"&prenom="+param2+"&pseudo="+param3;
34. //Correspond à run dans la classe Thread
35. //2eme thread: execution des fichiers php
36. try {
37. [Link](2000);
38. JSONObject result=[Link](url);
39. int s=[Link]("success");
40. if(s==1)
41. {
42. /** ajout avec success
43. * MAJ de vos interfaces graphiques
44. * par exmples si on met ici:
45. * ednom_ajout.setText("");
46. * ==> ça provoque une erreur et l'application se plante
47. * le view ednom_ajout est bloqué par l'UIT
48. * ==> Impossible accès
49. * solution:
50. **/
51. publishProgress(1);
52. // Appel implicite à onprogressUpdate avec le parametre 1
53. return true;
54. }
55. else {
56. // ya pas de données
57. return false;
58. }
59. } catch (InterruptedException | JSONException e) {
60. [Link]();
61. }
62. return false;
63. }
64. @Override
65. protected void onProgressUpdate(Integer... values) {
66. // UIThread
67. int i=values[0];
68. if(i==1) con.ednom_ajout.setText("");
69. }
70.
71. @Override
72. protected void onPostExecute(Boolean aBoolean) {
73. // UIThread
74. if(aBoolean)
75. {
76. [Link]();
77. // afficher vos données
78. }
79. else {
80. [Link]("vs navez pas de resultat..");
81. [Link]([Link].ic_dialog_alert);
82.
83. }
84. }
85. }

Vous aimerez peut-être aussi