Looper

 

Image non trouvée ! Pour appréhender ce chapitre, il faut connaître le cycle de vie d'une activité, les threads, handler et les messages.

 

Un Looper permet de gérer une boucle évènementielle ou boucle de messages.

Par défaut, seul l'UI Thread est de type looper thread. Les autres threads n'ont pas de looper attaché à leur file de messages. Mais rien ne vous empêches de transformer votre simple thread en looper Thread.

Il faudra pour cela utiliser la classe Looper dans votre Thread:

Image non trouvée !Il est impératif de mettre fin à votre thread en détruisant le Looper lorsque votre application se termine !

 

(Le looper est implémenté sous la forme d'un design pattern TLS ou Thread Local Storage)

 

Exemple

Voici un exemple, un peu difficile à lire à première vue, je sais...

L'idée et de faire communiquer le Thread qui va traiter le traitement long avec le thread UI (Normalement, vous connaissez déjà le handler...). Il va ainsi indiquer son avancement dans le traitement long au Thread UI qui lui représentera graphiquement l'état d'avancement dans une barre de progression.

L'UI Thread va communiquer avec le Thread de traitement long afin d'indiquer que l'utilisateur (via bouton) veut lancer ce traitement long.

Tout d'abord, voici le main.xml avec un texte explicatif, une barre de progression et un bouton.

Le fichier strings.xml qui va bien:

Et le code...

Qui met en jeu la création, destruction d'un activité, les threads, listener sur un bouton, looper, handler, messages, toast et Log