Je me suis un peu confus au sujet des différences entre Handlers
, AsyncTask
et Threads
dans Android. J'ai lu pas mal de blogs et de questions ici dans StackOverflow.
Handler
sont des fils d'arrière-plan qui vous permettent de communiquer avec l'interface utilisateur. La mise à jour d'une barre de progression, par exemple, doit être effectuée via Handler
. L'utilisation des gestionnaires vous offre l'avantage MessagingQueues
, donc si vous souhaitez planifier des messages ou mettre à jour plusieurs éléments d'interface utilisateur ou effectuer des tâches répétitives.
AsyncTask
sont similaires, en fait, ils utilisent Handler
, mais ne s'exécutent pas dans le thread d'interface utilisateur, c'est donc bon pour récupérer des données, par exemple pour récupérer des services Web. Plus tard, vous pourrez interagir avec l'interface utilisateur.
Thread
cependant ne peut pas interagir avec l'interface utilisateur, fournir un filetage plus "basique" et vous manquez toutes les abstractions de AsyncTask
.
Cependant, je voudrais avoir une connexion socket exécutée en service. Si cela doit être exécuté dans un gestionnaire ou un thread, ou même unAsyncTask
? L'interaction avec l'interface utilisateur n'est pas du tout nécessaire. Cela fait-il une différence en termes de performances que j'utilise?
Pendant ce temps, la documentation a été considérablement améliorée.
Handler
n'est pas un thread et n'exécute rien. Ce n'est qu'un moyen de transmettre en toute sécurité des messages d'un thread à la file d'attente de messages d'un autre thread . Donc, normalement, (au moins) deux threads doivent toujours être créés qui peuvent ensuite utiliser un gestionnaire, mais le gestionnaire ne peut rien exécuter lui-même.