Quelle est la différence entre Service, Async Task & Thread. Si je ne me trompe pas, ils sont tous habitués à faire des choses en arrière-plan. Alors, comment décider lequel utiliser et quand?
Vous avez probablement déjà lu la description de la documentation à leur sujet, je ne vais pas les répéter, je vais plutôt essayer de vous répondre avec mes propres mots, en espérant qu'ils vous aideront.
Le service est comme une activité mais n'a pas d'interface. Si vous voulez par exemple consulter la météo, vous ne créerez pas d'activité vide pour cette activité, vous utiliserez pour cela un service.
Un fil est un fil, vous le connaissez probablement déjà dans une 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 plus loin.
Une AsyncTask est un thread intelligent qu'il est conseillé d'utiliser. Intelligent car il peut aider avec ses méthodes, et il y a trois méthodes qui s'exécutent sur le thread d'interface utilisateur, ce qui est bien pour mettre à jour les composants de l'interface utilisateur.
J'utilise Services, AsyncTasks fréquemment. Passez moins de fil, ou pas du tout, car je peux presque tout faire avec AsyncTask.
C'est la réponse la plus facile à votre question
Fil de discussion
est une unité d'exécution qui s'exécute "en parallèle" avec le thread principal est un point important, vous ne pouvez pas mettre à jour un composant d'interface utilisateur à partir d'un thread sauf le fil principal.
AsyncTask
est un thread spécial, qui vous donne des méthodes d'assistance pour mettre à jour l'interface utilisateur . Vous pouvez donc mettre à jour l'interface utilisateur même si AsyncTask sera exécuté sur un thread en arrière-plan. La gestion de la communication entre processus n’est pas obligatoirement explicite.
Service
résolvez le problème ci-dessus car il vit séparément de l'activité qui l'invoque afin de pouvoir continuer à s'exécuter même lorsque l'activité est détruite ( il s'exécute dans le thread principal (attention à ANR) utilise un service en arrière-plan (étendez IntentService pour qu'il crée automatiquement le fil de travail pour vous) . Le service est comme une activité sans interface utilisateur , convient pour une tâche longue
Quelques autres informations que j'aurais aimé que quelqu'un me dise il y a quelques jours:
Mon cas d'utilisation est le suivant: j'ai un fil dans un espace global connecté à un serveur et une activité qui affiche les résultats. Lorsque l'utilisateur appuie sur le bouton d'accueil, l'activité passe en arrière-plan et un nouveau service est démarré. Ce service lit ensuite les résultats du thread et affiche des informations dans la zone de notification en cas de besoin. Je ne m'inquiète pas de la destruction de mon activité par le système d'exploitation, car je sais que tant que le service est en cours d'exécution, le thread sera détruit.
En bref, Service pour time consuming tasks
, AsyncTask pour short-lived tasks
, Fil de discussion est un standard Java construction
pour les discussions.
Du point de vue du développeur:
Thread: Utilisé pour exécuter le jeu de codes parallèlement au thread principal. Mais vous ne pouvez pas gérer l'interface utilisateur à l'intérieur du fil. Pour cela, vous devez utiliser Handler
. Hadler fonctionne comme un thread mais peut aussi gérer l'interface utilisateur.
ASyncTask: Utilisé pour gérer les tâches que vous ne pouvez pas configurer pour qu'elles fonctionnent sur le thread principal. Par exemple, une requête HTTP est un travail très lourd qui ne peut pas être manipulé sur le thread principal. Vous devez donc gérer la requête HTTP dans le ASyncTask
. Elle fonctionne parallèlement à votre thread principal de manière asynchrone en arrière-plan. Il a peu de méthodes de rappel. qui sont invoqués sur leurs événements correspondants.
Service: Est un processus en arrière-plan. Il est utilisé lorsque vous devez effectuer un traitement auquel aucune interface utilisateur n'est associée.
le service est comme une tâche consommant beaucoup de temps, mais une tâche asynchrone nous permet d'effectuer des opérations longues/en arrière-plan et d'afficher son résultat sur le thread d'interface utilisateur sans avoir à manipuler les threads.