Quelle est la différence entre Service, Async Task & Thread. Si je ne me trompe pas, tous sont habitués à faire des choses en arrière-plan. Alors, comment décider lequel utiliser et quand?
Quelle est la différence entre Service, Async Task & Thread. Si je ne me trompe pas, tous sont habitués à faire des choses en arrière-plan. Alors, comment décider lequel utiliser et quand?
Réponses:
Vous avez probablement déjà lu la description de la documentation à leur sujet, je ne les répéterai pas, j'essaierai plutôt de 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 utilisateur. Probablement si vous voulez récupérer la météo par exemple, vous ne créerez pas d'activité vide pour cela, vous utiliserez pour cela un service.
Un fil est un fil, vous le connaissez probablement déjà depuis 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 existe trois méthodes qui s'exécutent sur le thread d'interface utilisateur, ce qui est bon pour mettre à jour les composants de l'interface utilisateur.
J'utilise fréquemment les services, AsyncTasks. Thread moins, ou pas du tout, car je peux presque tout faire avec AsyncTask.
C'est la réponse la plus simple à votre question
Fil
est une unité d'exécution qui s'exécute "parallèlement" au thread principal est un point important, vous ne pouvez pas mettre à jour un composant d'interface utilisateur à partir de n'importe quel thread ici sauf le thread principal.
AsyncTask
est un thread spécial, qui vous donne des méthodes d'assistance pour mettre à jour l'interface utilisateur afin que, fondamentalement, vous puissiez mettre à jour l'interface utilisateur même AsyncTask fonctionnera sur un thread d'arrière-plan. Il n'est pas nécessaire que la gestion des communications interprocessus soit effectuée explicitement.
Un service
résoudre le problème ci-dessus car il est séparé de l'activité qui l'invoque afin qu'il puisse continuer à s'exécuter même lorsque l'activité est détruite, il s'exécute dans le thread principal (méfiez-vous de l'ANR) utilisez un service d'arrière-plan (étendez IntentService, il crée automatiquement le thread de travail pour vous) . Le service est comme une activité sans interface utilisateur , est bon pour une longue tâche
Quelques informations supplémentaires que j'aurais aimé que quelqu'un me dise il y a quelques jours:
Mon cas d'utilisation est le suivant: j'ai un thread dans l'espace global qui est connecté à un serveur et une activité qui montre 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 fil de discussion et affiche des informations dans la zone de notification si nécessaire. 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, il détruira le fil.
Du point de vue du développeur:
Thread : Utilisé pour exécuter l'ensemble de codes parallèlement au thread principal. Mais vous ne pouvez pas gérer l'interface utilisateur à l'intérieur du thread. Pour cela, vous devez utiliser Handler
. Hadler fonctionne comme un thread mais peut également gérer l'interface utilisateur.
ASyncTask : utilisé pour gérer les tâches que vous ne pouvez pas faire fonctionner sur le thread principal. Par exemple, une requête HTTP est un travail très lourd qui ne peut pas être géré sur le thread principal, vous gérez donc la requête HTTP dans le ASyncTask
Cela fonctionne en parallèle avec votre thread principal de manière asynchrone en arrière-plan.Il a peu de méthodes de rappel qui sont appelées sur leur correspondant événements.
Service : est un processus d'arrière-plan. Il est utilisé lorsque vous devez effectuer un traitement auquel aucune interface utilisateur n'est associée.
Service
ne sera pas nécessairement exécuté en arrière-plan, sauf si vous utilisez IntentService
. Si vous avez démarré un standart à Service
partir de l'UiThread, il fonctionnera sur l'UiThread.
Service
ne fonctionnera pas dans un processus différent par défaut, mais dans le processus d'application avec les autres composants. Mieux vaut dire que Service
cela fonctionnera dans l'arrière-plan du fil de discussion qu'il vivra à l'intérieur.