Les Services sont destinés à effectuer une action en arrière-plan pendant une certaine période de temps, indépendamment de ce que l'utilisateur est en train de faire en premier plan (l'utilisateur peut basculer entre les activités). Un bon exemple serait un lecteur de musique service - l'utilisateur commence à jouer de la musique via une application lecteur de musique, mais quand ils sortent de l'application de la musique continue à jouer.
Des Services sont également utiles pour fournir et de gérer d'accès à une ressource entre plusieurs applications. Ceci est souvent utilisé pour les ressources du système, tels que les capteurs.
Récepteurs de radiodiffusion sont destinés à répondre à une intention (généralement celui qui est envoyé par un service ou un événement système), faire quelque chose, et être fait. Un exemple pourrait être l'utilisateur touche à la technologie NFC, le téléphone à un tag, le système crée une intention pour cela, et inscrit récepteur poignées pour modifier certains paramètres (changement de volume, activer le bluetooth, etc).
Lorsque l'intention est diffusé via sendBroadcast, il sera envoyé à tous les récepteurs qui ont des filtres d'intention.
Exemple 1: Supposons que vous souhaitez exposer une fonction (disponible à partir de toute application qui veut l'utiliser) qui demande un site pour calculer les degrés de séparation de Kevin Bacon.
Notez que cet exemple est "faire quelque chose en retour", par opposition à exécuter une opération en arrière-plan.
Vous pourriez mettre en œuvre ce de plusieurs façons:
Créer un projet de bibliothèque que tous les utilisateurs de compiler dans leur application.
- Il y a maintenant plusieurs copies de votre code, et qu'ils pourraient tous être des versions différentes.
- Vous ne pouviez pas de lot ou de demandes de cache que chaque demande est traitée de manière indépendante.
Créer un récepteur de radiodiffusion de traiter chaque demande.
- Votre application enregistre un récepteur de radiodiffusion afin d'accepter une Intention de poser la question Bacon
- Chaque application envoie une Intention de poser la question.
- Le récepteur de radiodiffusion accepte l'Intention et soit
- Transmet la requête à un service pour le traitement, qui envoie une Intention de l'auteur de la demande le résultat
- Envoie une requête au serveur qui va répondre à l'aide de Google Cloud Messaging quand c'est fait
- Parce que toutes les requêtes passent par une application, vous pouvez batch/mettre en cache les résultats
- C'est toujours asynchrone
- L'API est "Intentions" - pas le plus sympathique façon d'exposer votre fonctionnalité
Créer un service pour traiter chaque demande
- Votre application crée un service pour gérer les demandes, et expose une API par l'intermédiaire d'un Liant ou à l'aide de AIDL
- L'API peut être synchrone (appel direct et retour) ou asynchrone (permet à l'auditeur d'enregistrement et appel de l'auditeur lorsque le résultat est prêt). Vous devez seulement choisir synchrone si le traitement devrait être très rapide; des appels au serveur devrait plus souvent être traitées de manière asynchrone
- L'API est "les appels de méthode" - un beaucoup plus conviviale de manière à exposer les fonctionnalités
Exemple 2: Vous voulez faire quelque chose d'analyse de données pour trouver quelques modèles dans vos données
Thread d'arrière-plan Si tout le traitement devrait se produire lorsque l'utilisateur est dans la même application et la même Activité, un thread d'arrière-plan (ou une AsyncTask qui gère un thread d'arrière-plan) serait une bonne approche
Service Si vous souhaitez permettre à l'utilisateur de quitter l'application, tandis que le traitement est en cours (et de les informer des résultats par la suite), ou de leur permettre de progresser au travers de plusieurs activités dans la même application, tandis que le traitement est effectué, le Service serait une meilleure approche