143 votes

Quelle est la différence entre un IntentService et un Service ?

Pouvez-vous s'il vous plaît m'aider à comprendre quelle est la différence entre une IntentService et un Service est ?

2 votes

6 votes

1 votes

S'il vous plaît, allez sur les liens ci-dessus, ils sont vraiment TROP BIEN... un grand merci pour eux...

130voto

Jashan PJ Points 1587

Service est une classe de base de la mise en œuvre du service. Service s'exécute sur le thread principal de l'application, ce qui peut réduire les performances de l'application. Ainsi, IntentService qui est une sous-classe directe de Service est disponible pour faciliter les choses.

En IntentService est utilisé pour effectuer une certaine tâche en arrière-plan. Une fois effectuée, l'instance de IntentService se termine automatiquement. Il peut être utilisé, par exemple, pour télécharger une certaine ressource sur l'Internet.

Différences

  1. Service utilise le thread principal de l'application, tandis que la classe IntentService crée un thread de travailleur et utilise ce thread pour exécuter le service.
  2. IntentService crée une file d'attente qui passe une intention à la fois à onHandleIntent() . Ainsi, l'implémentation d'un multithread doit se faire en étendant le module Service directement. Service La classe a besoin d'un manuel pour arrêter d'utiliser stopSelf() . En attendant, IntentService s'arrête automatiquement lorsqu'il termine son exécution.
  3. IntentService met en œuvre onBind() qui renvoie null . Cela signifie que le IntentService ne peuvent pas être liés par défaut.
  4. IntentService met en œuvre onStartCommand() qui envoie un Intent à la file d'attente et à onHandleIntent() .

En bref, il n'y a que deux choses à faire pour utiliser IntentService . Premièrement, pour implémenter le constructeur. Et deuxièmement, pour implémenter onHandleIntent() . Pour les autres méthodes de rappel, il est nécessaire d'appeler le super pour qu'il puisse être suivi correctement.

0 votes

Bonne explication. Je suis en train de créer une application musicale. Alors, lequel serait le plus approprié ? Service ou IntentService ?

11 votes

Pour les applications musicales, je pense que vous devez utiliser un service car, par défaut, IntentService n'est pas lisible et, je pense, que vous devez lier votre application musicale à un service musical pour le démarrer et l'arrêter. Comme déjà dit, IntentService est mieux pour "démarrer et oublier".

0 votes

@Premier IntentService ne serait-il pas similaire à Service.START_NOT_STICKY ? Puisque c'est aussi "démarrer et oublier" selon votre exemple.

124voto

Phix Points 2068

En résumé, un Service est une implémentation plus large permettant au développeur de mettre en place des opérations en arrière-plan, tandis qu'un IntentService est utile pour les opérations "à chaud", prenant en charge la création et le nettoyage des fils en arrière-plan.

Dans la documentation :

Service Un service est un composant d'application représentant soit le désir d'une application d'effectuer une opération de longue durée sans interagir avec l'utilisateur, soit de fournir une fonctionnalité à d'autres applications.

IntentService Service est une classe de base pour IntentService Services qui traitent les demandes asynchrones (exprimés sous forme d'intentions) sur demande. Les clients envoient des demandes par le biais de startService(Intent) Le service est démarré selon les besoins, traite chaque intention à tour de rôle en utilisant un fil de travail et s'arrête lorsqu'il est à court de travail.

Consultez ce document - http://developer.Android.com/reference/Android/app/IntentService.html

9 votes

IntentService n'est pas une classe de base de Services. L'inverse est vrai. Vérifiez - developer.Android.com/reference/Android/app/IntentService.html

6 votes

@Darpan Il s'agit d'une classe de base pour les "Services qui gèrent les requêtes asynchrones", et non pour les simples "Services". C'est pourquoi la phrase ci-dessus est correcte.

0 votes

Bonjour à tous, puis-je écrire un IntentService dans un Service ? Si oui, quelqu'un peut-il me fournir un exemple ou un extrait de code ? Merci

71voto

DineshKumar Points 459

Service : Il fonctionne en arrière-plan sur votre système. Par exemple,

  1. Si vous allez dans un hôtel et que vous donnez votre commande pour une soupe à un serveur
  2. Le serveur reçoit votre commande et l'envoie au chef
  3. Vous ne savez pas comment la soupe est préparée dans la cuisine et quels sont les procédés nécessaires à sa fabrication.
  4. Une fois que votre commande est prête, le serveur vous apporte la soupe.

arrière-plan : le chef prépare une soupe

IntentService:- il s'agit d'un service consécutif (par exemple, lorsque vous commandez plusieurs aliments à la fois au serveur, mais que ce dernier les livre un par un et non en une seule fois).

8 votes

J'aime votre style d'explication.

4 votes

Désolé, mais il manque des différences importantes entre les deux

0 votes

Que voulez-vous dire par "service consécutif" ?

18voto

ldce Points 632

Service

  • Tâche sans interface utilisateur, mais ne doit pas être utilisée pour une longue tâche. Utilisez un thread dans le service pour les tâches longues
  • Invoquer par onStartService()
  • Déclenché à partir de n'importe quel fil
  • Runs on Main Thread
  • Bloc de mai main(UI ) fil

IntentService

  • Les tâches longues ne communiquent généralement pas avec le fil d'exécution principal. Si la communication est nécessaire, elle est assurée par le gestionnaire ou la diffusion.
  • Invocation via Intent
  • déclenché à partir du fil principal ( L'intention est reçue sur le fil principal et le fil de travail est créé. )
  • Fonctionne sur un fil séparé
  • Nous ne pouvons pas exécuter une tâche en parallèle et plusieurs intentions sont mises en file d'attente sur le même thread de travail.

17voto

abbas.aniefa Points 1677

Service s'exécute en fait dans le même thread de votre application ; lorsque vous étendez Service, vous devez manuellement créer de nouveaux threads pour exécuter les opérations de blocage du CPU.

vs

IntentService est une sous-classe de Service qui génère un thread pour effectuer le travail de fond à partir de là (il n'est pas nécessaire de créer un nouveau thread pour effectuer des opérations de blocage du CPU).

0 votes

Ne sert-il pas à empêcher les opérations de blocage du CPU, et non à les exécuter ? Je n'en suis pas sûr.

0 votes

C'est vrai, le service a besoin d'un nouveau fil pour exécuter les opérations de blocage du CPU.

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