151 votes

Différence entre service, tâche asynchrone et thread?

Quelle est la différence entre Service, Async Task & Thread. Si je ne me trompe pas tous sont utilisés pour faire des choses en arrière-plan. Alors, comment décider lequel utiliser et quand?

190voto

Pentium10 Points 68884

Vous avez probablement déjà lu la documentation description sur eux, je ne vais pas les répéter, à la place je vais essayer de répondre avec mes propres mots, j'espère qu'ils vont vous aider.

  • Un Service est une Activité, mais n'a pas d'interface. Probablement, si vous souhaitez récupérer la météo par exemple vous n'aurez pas à créer une nouvelle activité, pour elle, pour cela, vous allez utiliser un Service.

  • Un Thread est un Thread, probablement, vous savez déjà de l'autre partie. Vous devez savoir que vous ne pouvez pas mettre à jour l'INTERFACE utilisateur à partir d'un Thread. Vous devez utiliser un Gestionnaire pour cela, mais lisez la suite.

  • Une AsyncTask est un être intelligent Thread qui est conseillé pour être utilisé. Intelligent comme il peut l'aider avec ses méthodes, et il y a deux méthodes qui s'exécutent sur le thread de l'INTERFACE utilisateur, ce qui est bon pour mettre à jour les composants de l'INTERFACE utilisateur.

Je suis, en utilisant les Services, AsyncTasks fréquemment. Fil moins, ou pas du tout, je peux pratiquement tout faire avec AsyncTask.

15voto

Peter Jankuliak Points 1005

Quelques plus d'informations je souhaite que quelqu'un m'avait dit il y a quelques jours:

  • Vous pouvez partager des variables globales - tels que des filets entre les Activités et les Services.
  • Votre application avec toutes ses variables globales ne sera pas effacé tant qu'il y est une Activité ou d'un Service toujours présent.
  • Si vous avez une instance d'un Service dans votre application et de l'OS a besoin de ressources, il tue d'abord vos Activités, mais tant qu'il y a le Service, le système d'exploitation ne pas effacer votre demande avec ses variables globales.

Mon cas d'utilisation, c'est comme cela: j'ai un fil dans l'espace global qui est connecté à un serveur et une Activité qui affiche les résultats. Quand l'utilisateur appuie sur le bouton home, l'Activité se passe à l'arrière-plan et un nouveau Service est démarré. Ce service lit ensuite les résultats de la fil et affiche les informations dans la zone de notification en cas de besoin. Je ne vous inquiétez pas à propos de l'OS de détruire mon Activité parce que je sais que tant que le Service est en cours d'exécution il ne détruirait le fil.

8voto

user3244180 Points 106

Fil

Un thread est un concurrent à l'unité d'exécution. Il a sa propre pile d'appel. Il existe deux méthodes pour mettre en œuvre des threads dans les applications.

L'un est de fournir une nouvelle classe qui étend la classe Thread et dominante de sa méthode run (). L'autre est de fournir un nouveau Thread avec un Exécutable de l'objet lors de sa création. Un thread peut être exécuté par l'appelant son "départ" de la méthode. Vous pouvez définir la Priorité d'un thread en appelant sa "setPriority(int)" la méthode.

Un fil peut être utilisé si vous n'avez pas d'incidence sur dans l'INTERFACE utilisateur de la partie. Par exemple, vous appelez certains de service web ou télécharger des données, et après le téléchargement, vous affichant à l'écran. Ensuite, vous devez utiliser un Gestionnaire avec un Fil et cela rendra votre application compliqué à gérer toutes les réponses à partir de Fils.

Un Gestionnaire vous permet d'envoyer et de traiter le Message et Praticable objets associés à un thread MessageQueue. Chaque thread a chaque file d'attente de messages. (Comme une Liste de choses À faire), et le thread va prendre chaque message et le processus jusqu'à ce que le message de la file d'attente est vide. Ainsi, lorsque le Gestionnaire communique, il donne simplement un message à l'appelant fil et il faudra attendre pour processus.

Si vous utilisez Java threads alors vous avez besoin pour gérer les exigences suivantes dans votre code:

  • La synchronisation avec le thread principal si vous publiez les résultats de l' interface utilisateur Pas de valeur par défaut pour l'annulation de la thread Aucun thread par défaut mise en commun Pas de valeur par défaut pour le traitement des modifications de configuration dans Android

AsyncTask

AsyncTask permet une utilisation facile et de le thread d'INTERFACE utilisateur. Cette classe permet d'effectuer des opérations d'arrière-plan et la publication des résultats sur le thread de l'INTERFACE utilisateur sans avoir à manipuler les threads et/ou les gestionnaires. Une tâche asynchrone est défini 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 va passer par le suivant 4 étapes:

onPreExecute()

Appelée par le thread de l'INTERFACE utilisateur avant l'exécution de la tâche

doInbackground(Params..)

Appelée par le thread d'arrière-plan immédiatement après onPreExecute() termine son exécution.

onProgressUpdate(Progrès..)

Appelée par le thread de l'INTERFACE utilisateur après un appel à publishProgress(le Progrès...).

onPostExecute(Suite)

Appelée par le thread de l'INTERFACE utilisateur après le calcul de fond de finitions.
Pourquoi devriez-vous utiliser AsyncTask?

Facile à utiliser pour un Thread d'INTERFACE utilisateur. (Donc, l'utiliser lorsque le thread appelant est un thread d'INTERFACE utilisateur). Pas besoin de manipuler des Gestionnaires.

Service Un Service est un contexte semblable à celui de l'Activité mais n'a pas d'interface graphique.

Important: Un service qui ne fonctionne pas dans un nouveau thread!

Lisez à propos de Service et également de vérifier Comment toujours exécuter un service en arrière-plan

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X