816 votes

Service vs service d'intention

Quelqu'un peut-il me montrer un exemple de quelque chose qui peut être fait avec un IntentService qui ne peut pas être fait avec un Service (et vice-versa)?

Je crois également qu'un IntentService s'exécute dans un thread différent et un service ne fonctionne pas. Donc, pour autant que je puisse voir, démarrer un service dans son propre thread, c'est comme démarrer un IntentService. N'est-ce pas?

J'apprécierais que quelqu'un puisse m'aider avec mes deux questions.

1417voto

José Juan Sánchez Points 2699

Tejas Lagvankar a écrit un joli post sur ce sujet. Ci-dessous sont certaines des principales différences entre le Service et IntentService.

Quand les utiliser?

  • Le Service peut être utilisé dans les tâches sans INTERFACE utilisateur, mais ne devrait pas être trop long. Si vous avez besoin de réaliser des tâches, vous devez utiliser des threads au sein du Service.

  • Le IntentService peut être utilisé dans de longues tâches généralement avec aucune communication Thread Principal. Si la communication est nécessaire, peut utiliser des Thread Principal gestionnaire ou la diffusion de ses intentions. Un autre cas d'utilisation, c'est quand les rappels sont nécessaires (Intention déclenché des tâches).

Comment déclencher?

  • Le Service est déclenché l'appel à la méthode onStartService().

  • Le IntentService est déclenchée à l'aide d'une Intention, il donne naissance à un nouveau thread de travail et la méthode de onHandleIntent() est appelé sur ce fil.

Déclenchée À Partir De

  • Le Service peut être déclenché à partir de n'importe quel thread.

  • Le IntentService doit être déclenché à partir du Thread Principal.

Fonctionne Sur

  • Le Service s'exécute en arrière-plan, mais il fonctionne sur le Thread Principal de l'application.

  • Le IntentService s'exécute sur un autre thread de travail.

Limites / Inconvénients

  • Le Service peut bloquer le Thread Principal de l'application.

  • Le IntentService ne peut pas exécuter des tâches en parallèle. Par conséquent, toutes les consécutives intentions d'aller dans la file d'attente de message pour le thread de travail et exécuter séquentiellement.

Quand arrêter?

  • Si vous implémentez un Service, il est de votre responsabilité d'arrêter le service une fois son travail terminé, en appelant stopSelf() ou stopService(). (Si vous voulez seulement de fournir de liaison, vous n'avez pas besoin de mettre en œuvre cette méthode).

  • Le IntentService arrête le service de toutes les demandes ont été traitées, de sorte que vous ne jamais avoir à appeler stopSelf().

174voto

CommonsWare Points 402670

Si quelqu'un peut me montrer un exemple de quelque chose que vous pouvez faire avec un intentService et ne peut pas être fait avec un Service et l'autre manière autour.

Par définition, c'est impossible. IntentService est une sous-classe de Service, écrit en code Java. Par conséquent, tout ce qu'un IntentService t, Service pourrait faire, y compris les bits de code qui IntentService utilise.

Démarrage d'un service avec son propre thread, c'est comme commencer un IntentService. N'est-il pas?

Les trois principales caractéristiques d'un IntentService sont:

  • le thread d'arrière-plan

  • le système automatique de mise en attente des Intents livré onStartCommand(), donc si on Intent est en cours de traitement par onHandleIntent() sur le thread d'arrière-plan, d'autres commandes de la queue en attendant leur tour

  • l'arrêt automatique de l' IntentService, via un appel à stopSelf(), une fois la file d'attente est vide

Toute et à tous, qui pourrait être mis en œuvre par un Service sans étendre IntentService.

21voto

varun Points 123

Les différences

  1. Classe de Service utilise l'application du thread principal, tandis que IntentService crée un thread de travail et utilise ce thread pour exécuter le service.
  2. IntentService crée une file d'attente passe de l'intention à un moment de onHandleIntent(). Ainsi, la mise en œuvre d'un multi-thread doit être effectué par l'extension de la classe de Service directement.
  3. Classe de Service a besoin d'un arrêt manuel à l'aide de stopSelf(). Pendant ce temps, IntentService s'arrête automatiquement quand il y a pas d'intention dans la file d'attente.
  4. IntentService implémente onBind() qui renvoie la valeur null. Cela signifie que le IntentService ne peut pas être lié par défaut.
  5. IntentService implémente onStartCommand() qui envoie l'Intention de file d'attente et de onHandleIntent().

15voto

Sree Rama Points 396

L'ajout de points à accepté de répondre:

Voir l'utilisation de IntentService dans l'API Android. par exemple:

public class SimpleWakefulService extends IntentService {
    public SimpleWakefulService() {
        super("SimpleWakefulService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {  ...}

Pour créer un IntentService composant de votre application, de définir une classe qui étend la classe IntentService, et, en son sein, de définir une méthode qui remplace onHandleIntent().

Voir aussi le code source de la IntentService, c'est consutructor et le cycle de vie des méthodes comme onStartCommand..

  @Override
    public int More ...onStartCommand(Intent intent, int flags, int startId) {
       onStart(intent, startId);
        return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;
    }

Service un AsyncTask est l'une des meilleures approches pour beaucoup usecases où la charge utile n'est pas énorme. ou tout simplement créer une classe l'extension de IntentSerivce. À partir de la version Android 4.0 réseau les opérations doivent être dans les processus d'arrière-plan sinon, l'application de la compilation/l'échec de la construction. thread de l'UI. La classe AsyncTask fournit l'une des façons les plus simples pour déclencher une nouvelle tâche de l'UI thread. Pour plus de discussion sur ce sujet, voir le post de blog

de Android guide pour les développeurs:

IntentService est une classe de base pour les Services qui gèrent les requêtes asynchrones (exprimé en Intentions) sur demande. Les Clients envoient des requêtes à travers startService(Intent) appelle; le service est démarré en tant que de besoin, les poignées de chaque Intention de tourner à l'aide d'un thread de travail, et s'arrête de lui-même quand il est à court de travail.

Modèle de conception utilisés dans IntentService

: Ce "travail de la file d'attente du processeur" motif est couramment utilisé pour décharger des tâches à partir d'une application thread principal. Le IntentService il existe des classes pour simplifier ce modèle et de prendre soin de la mécanique. Pour l'utiliser, étendre IntentService et de mettre en œuvre onHandleIntent(Intention). IntentService recevrez les Intentions, le lancement d'un thread de travail, et arrêter le service le plus approprié.

Toutes les demandes sont traitées sur un seul thread de travail -- ils peuvent prendre aussi longtemps que nécessaire (et ne va pas bloquer l'application de la boucle principale), mais une seule demande sera traitée à la fois.

Le IntentService classe fournit une simple structure pour l'exécution d'une opération sur un seul thread d'arrière-plan. Cela permet de gérer des opérations de longue durée, sans affecter votre interface utilisateur de la réactivité. Aussi, un IntentService n'est pas affecté par la plupart de l'interface utilisateur événements du cycle de vie, de sorte qu'il continue à fonctionner dans des circonstances qui pourraient arrêter une AsyncTask.

Un IntentService a quelques limitations:

Il ne peut pas interagir directement avec votre interface utilisateur. Pour mettre ses résultats dans l'INTERFACE utilisateur, vous devez les envoyer à une Activité. Les demandes de travail sont exécutées de manière séquentielle. Si une opération est en cours dans un IntentService, et de vous envoyer une autre demande, la demande attend jusqu'à ce que la première opération est terminée. Une opération en cours d'exécution sur un IntentService ne peut pas être interrompu. Cependant, dans la plupart des cas

IntentService est le moyen privilégié de simples opérations d'arrière-plan

**

Volley Bibliothèque

Il est appelé bibliothèque de volley-bibliothèque pour le développement d'android applications de mise en réseau Le code Source est à la disposition du public sur github.

La android la documentation officielle de Meilleures pratiques pour les travaux en arrière-plan: permet de mieux comprendre l'intention du service, du fil, un gestionnaire de service. et également d'Effectuer les Opérations de Réseau

14voto

Stefan de Bruijn Points 3863

Je suis sûr que vous pouvez trouver une vaste liste de différences par simple recherche sur google quelque chose comme "Android IntentService vs Service"

L'une des plus importantes différences, par exemple, c'est que IntentService se termine une fois que c'est fait.

Quelques exemples (vite fait):

IntentService: Si vous souhaitez télécharger un tas d'images au début de l'ouverture de votre application. C'est un processus unique et permet de nettoyer lui-même une fois que tout est téléchargé.

Service: Un Service qui va constamment être utilisé pour communiquer entre votre application et le back-end web d'appels d'API. Même si c'est fini avec sa tâche actuelle, vous voulez toujours être autour de quelques minutes plus tard, pour plus de communication.

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