Asynctask vs Thread dans Android

Dans l’interface utilisateur, pour effectuer certains travaux d’arrière-plan, j’ai utilisé un Thread distinct. Mais comme suggéré par d’autres, j’utilise maintenant AsyncTask .

Quelle est la principale différence entre un Thread et un AsyncTask ?

Dans quel scénario dois-je utiliser un Thread ou une AsyncTask ?

Pour les tâches de longue durée ou gourmandes en ressources processeur, il existe essentiellement deux manières de procéder: les threads Java et AsyncTask natif d’Android.

Ni l’un ni l’autre n’est nécessairement meilleur que l’autre, mais savoir à quel moment utiliser chaque appel est essentiel pour tirer parti des performances du système à votre avantage.

Utilisez AsyncTask pour:

  1. Opérations réseau simples ne nécessitant pas de télécharger beaucoup de données
  2. Tâches liées aux disques pouvant durer plus de quelques millisecondes

Utilisez les threads Java pour:

  1. Opérations réseau impliquant un volume de données modéré à élevé (téléchargement ou téléchargement)
  2. Tâches à haut processeur qui doivent être exécutées en arrière-plan
  3. Toute tâche où vous souhaitez contrôler l’utilisation du processeur par rapport au thread d’interface graphique

Et il y a beaucoup de bonnes ressources sur Internet qui peuvent vous aider:

http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html http://www.mergeconflict.net/2012/05/java-threads-vs-android-asynctask-which.html

Si vous utilisez des threads Java, vous devez gérer les exigences suivantes dans votre propre code:

Synchronisation avec le thread principal si vous publiez les résultats dans l’interface utilisateur

Pas de défaut pour annuler le fil

Aucun pool de threads par défaut

Pas de défaut pour gérer les modifications de configuration dans Android

Fil

  • Longue tâche en général
  • Invoquer par la méthode thread.start ()
  • Déclenché à partir de n’importe quel thread
  • Fonctionne sur son propre fil
  • La gestion / code de thread manuel peut devenir difficile à lire

AsyncTask

  • Petite tâche devant communiquer avec le thread principal
  • Méthode Invoke by excute ()
  • Déclenché à partir du thread principal
  • Fonctionne sur le thread de travail
  • Doit être exécuté et créé à partir du thread principal

Fil

Un thread est une unité d’exécution simultanée. Il a sa propre stack d’appels. Il existe deux méthodes pour implémenter les threads dans les applications.

L’un fournit une nouvelle classe qui étend Thread et remplace sa méthode run (). L’autre fournit une nouvelle instance Thread avec un object Runnable lors de sa création. Un thread peut être exécuté en appelant sa méthode “start”. Vous pouvez définir la “Priorité” d’un thread en appelant sa méthode “setPriority (int)”.

Un thread peut être utilisé si vous n’avez aucun effet dans la partie interface utilisateur. Par exemple, vous appelez un service Web ou téléchargez des données et, après le téléchargement, vous les affichez à l’écran. Ensuite, vous devez utiliser un gestionnaire avec un thread et cela compliquera votre application pour gérer toutes les réponses des threads.

Un gestionnaire vous permet d’envoyer et de traiter des objects Message et Runnable associés à un MessageQueue d’un thread. Chaque thread a chaque queue de messages. (Comme une liste de tâches), et le thread prendra chaque message et le traitera jusqu’à ce que la queue des messages soit vide. Ainsi, lorsque le gestionnaire communique, il ne fait que transmettre un message au thread appelant et attend pour le traiter.

Si vous utilisez des threads Java, vous devez gérer les exigences suivantes dans votre propre code:

Synchronisation avec le thread principal si vous publiez les résultats sur l’interface utilisateur Aucune par défaut pour l’annulation du thread Aucun regroupement de threads par défaut Aucun par défaut pour gérer les modifications de configuration dans Android

AsyncTask

AsyncTask permet une utilisation correcte et facile du thread de l’interface utilisateur. Cette classe permet d’effectuer des opérations en arrière-plan et de publier des résultats sur le thread d’interface utilisateur sans avoir à manipuler les threads et / ou les gestionnaires. 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.

AsyncTask passera par les 4 étapes suivantes:

onPrecExute ()

Invoqué sur le thread d’interface utilisateur avant l’exécution de la tâche

doInbackground (Params ..)

Invoqué sur le thread d’arrière-plan immédiatement après l’exécution de onPreExecute ().

onProgressUpdate (Progress ..)

Invoqué sur le thread d’interface utilisateur après un appel à publishProgress (Progress …).

onPostExecute (Résultat)

Invoqué sur le thread d’interface utilisateur une fois le calcul en arrière-plan terminé.

Pourquoi devriez-vous utiliser AsyncTask?

Facile à utiliser pour un thread d’interface utilisateur. (Donc, utilisez-le lorsque le thread appelant est un thread d’interface utilisateur).

Pas besoin de manipuler les gestionnaires.

Pour plus d’informations visitez ici

Fil:

Thread doit être utilisé pour séparer les opérations longues du thread principal afin d’améliorer les performances. Mais il ne peut pas être annulé avec élégance et il ne peut pas gérer les changements de configuration d’Android. Vous ne pouvez pas mettre à jour l’interface utilisateur depuis Thread .

AsyncTask peut être utilisé pour gérer des éléments de travail d’une durée inférieure à 5 ms. Avec AsyncTask , vous pouvez mettre à jour l’interface utilisateur, contrairement à Java Thread . Mais de nombreuses tâches longues vont étouffer les performances.

Vous avez peu d’alternatives aux deux.

HandlerThread / Handler et ThreadPoolExecutor

Reportez-vous à l’article ci-dessous pour plus de détails:

Handler vs AsyncTask vs Thread