Quelle est la différence entre un service et un récepteur de diffusion?


14

J'entends toujours parler des services et des récepteurs de diffusion . Quelle est la différence entre eux et comment affectent-ils le fonctionnement de mon téléphone Android de mon point de vue?


Vous savez, au lieu de créer des ports sur la couche TCP, nous créons toujours des récepteurs de diffusion pour économiser la batterie et beaucoup de traitement .. Lorsqu'un événement se produit dans Android .... la diffusion est envoyée dans le téléphone à toutes les applications .. Et si vous que le récepteur de diffusion de cet événement soit écrit, il sera automatiquement appelé. Techniquement, l'événement s'est produit est appelé intention en termes d'androïde
Rahul Raina

Réponses:


27

Les applications Android ont trois types de composants. En général, les utilisateurs n'ont pas besoin de les connaître: ils sont un moyen pour les auteurs d'applications de programmer des comportements particuliers dans leurs applications. Mais si vous observez de près le comportement de vos applications, comme avec un gestionnaire de tâches, ou si vous automatisez des choses avec une application comme Tasker, il est utile de comprendre comment elles s'intègrent au sein du système.

Une activité est le type de composant le plus familier: c'est une fenêtre que vous pouvez voir: en plein écran ou au format boîte de dialogue. Une activité ne s'exécute que lorsqu'elle est affichée à l'écran. Une fois que vous quittez l'activité, Android gardera cette application en mémoire prête à être redémarrée, mais l'activité ne s'exécutera pas, ce qui signifie qu'elle n'utilisera pas de batterie ou de réseau. Une application démarre une activité en utilisant une intention . L'intention peut spécifier explicitement quelle activité démarrer, ou elle peut spécifier une action à effectuer (telle que l'ouverture d'un fichier particulier). Si plusieurs activités peuvent "gérer" l'intention, la boîte de dialogue vous invite à en choisir une.

Un service est un autre composant d'application. Une fois qu'un autre composant (peut-être une activité ou un autre service) a démarré un service, il s'exécute en arrière-plan jusqu'à ce qu'il s'arrête. Cela signifie qu'un service peut garder votre téléphone éveillé (en utilisant un verrou de réveil ), décharger la batterie ou utiliser beaucoup de données réseau, sans que rien ne s'affiche à l'écran.

Les applications peuvent utiliser des services pour effectuer des processus de longue durée en arrière-plan, tels que le téléchargement de fichiers à partir d'un serveur, la vérification des e-mails ou la vérification de votre emplacement. Bien que les services ne s'affichent pas ou n'interagissent pas directement avec vous, ils apparaissent toujours dans la liste "Exécution des applications". Dans l' application Paramètres , choisissez Applications ou Gestionnaire d'applications , puis Exécution . Vous pouvez arrêter un service de cette façon, mais ce n'est généralement pas nécessaire. Parce que les services ne sont pas directement visibles, Android les considère comme moins importants que les activités, ils seront donc les premiers à être supprimés lorsque votre téléphone aura besoin de plus de mémoire.

Les récepteurs de diffusion sont le troisième type de composant. Comme les services, ils n'existent qu'en arrière-plan et n'interagissent pas directement avec vous. Mais contrairement aux services, ils ne peuvent pas continuer à fonctionner ou effectuer de longues tâches: ils existent pour répondre aux événements. Et contrairement aux activités et aux services, plusieurs récepteurs de diffusion peuvent être démarrés en une seule fois.

Un composant diffuse une intention, éventuellement vers une application, mais le plus souvent sans spécifier une application particulière. Dans ce cas, l'intention représente généralement un événement qui s'est produit, comme la batterie faible. Le système recherche tous les récepteurs de diffusion qui ont enregistré un intérêt (à l'aide d'un filtre d'intention ) et les exécute tour à tour. Chaque récepteur de diffusion peut réagir immédiatement, par exemple en créant une notification, ou il peut démarrer un service ou une activité pour prendre d'autres mesures. Dès que le récepteur de diffusion a géré l'événement, celui-ci est arrêté et ne s'exécute plus jusqu'à ce qu'un autre événement similaire soit diffusé.

Un exemple des trois composants fonctionnant ensemble est lorsque vous téléchargez une application à partir de Google Play. Tout d'abord, l'activité Google Play fournit l'interface visuelle pour vous permettre de choisir le contenu à télécharger. La liste des applications peut être une activité; cliquer sur le bouton "installer" démarre une autre activité pour afficher la boîte de dialogue de confirmation ou de paiement. Lorsque vous confirmez, l'activité de dialogue démarre un service. Le service continuera de télécharger le contenu même lorsque l'activité est terminée et n'est plus en cours d'exécution.

Mais peut-être que le téléphone perd la connexion Internet pendant le téléchargement de la nouvelle application. Si cela se produit, le service de téléchargement de Google Play enregistrera un récepteur de diffusion, avec un filtre d'intention pour dire qu'il est intéressé par les changements de connectivité réseau, puis le service s'arrêtera. Lorsque le téléphone se connecte à Internet, le système diffuse un événement. Android démarrera le récepteur de diffusion enregistré par le service Google Play, ainsi que tout autre récepteur de diffusion en attente de cet événement. Dans ce cas, le récepteur de diffusion redémarrera le service de téléchargement. Le service créera des notifications au fur et à mesure du téléchargement et, une fois terminé, il enverra sa propre diffusion pour informer les autres applications que le nouveau package a été installé, puis s'arrêtera automatiquement. À son tour, cela démarrera les récepteurs de diffusion à partir d'autres applications,

En résumé:-

  • Une activité représente une fenêtre à l'écran; un service effectue une tâche d'arrière-plan éventuellement longue; un récepteur de diffusion fonctionne pendant une courte période pour gérer un événement.
  • Tous les trois sont démarrés en utilisant des intentions, mais en utilisant un mécanisme différent. L'application de lancement doit indiquer explicitement le type de composant à démarrer (en appelant une méthode différente dans chaque cas).
  • Lorsqu'une application démarre une activité en utilisant une intention, elle ne démarre qu'une seule activité (affichant éventuellement la boîte de dialogue "Action complète en utilisant ..." pour vous permettre de choisir laquelle), et il en va de même pour les services, mais la diffusion d'une intention peut démarrer plusieurs diffusions récepteurs, éventuellement à partir de différentes applications.
  • En tant qu'utilisateur, vous interagissez directement avec les activités; vous n'interagissez pas avec les services, mais ils peuvent ralentir le téléphone et consommer des ressources; vous n'interagissez pas avec les récepteurs de diffusion, et comme ils sont de courte durée, vous n'avez pas à vous soucier de les gérer.

Une réponse très utile. Je veux juste confirmer quelque chose: qu'advient-il des applications désactivées par les utilisateurs? Android démarre-t-il jamais son récepteur de diffusion dans le but pour lequel il est inscrit? Ou ces applications désactivées peuvent-elles exécuter leur service en arrière-plan? Pourquoi le bouton Force-Stop n'est-il pas grisé pour les applications désactivées même après un redémarrage? Il est clair pour moi que leurs activités ne peuvent pas être lancées.
Firelord

@Firelord Si vous avez une nouvelle question, vous devez la poster en tant que nouvelle question. Les commentaires ne permettent pas de réponses approfondies et ne rendent pas votre question accessible aux autres visiteurs.
Dan Hulme

grand poste, mais en fait, il y a quatre composants. Les fournisseurs de contenu sont manquants.
Alexandre Martin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.