91 votes

Qu'est-ce qu'une émission collante ?

Je suis tombé sur ce terme dans la documentation Android avec la définition qui l'accompagne

Il s'agit de diffusions dont les données sont conservées par le système après avoir été terminées, de sorte que les clients peuvent récupérer rapidement ces données sans avoir à attendre la prochaine diffusion.

Qu'est-ce que cela signifie ? Quelqu'un peut-il préciser son utilisation à l'aide d'un exemple particulier ? Je crois que nous devons demander une autorisation pour utiliser cette intention ? Pourquoi ?

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> - Allows an application to broadcast sticky intents.

4 votes

08/Feb/2019, pour toute personne recherchant une diffusion collante et se terminant ici, de document officiel Sticky broadcasts should not be used. They provide no security (anyone can access them), no protection (anyone can modify them), and many other problems. The recommended pattern is to use a non-sticky broadcast to report that something has changed, with another mechanism for apps to retrieve the current value whenever desired.

112voto

Paul Burke Points 9869

Si une activité appelle onPause avec une émission normale, la réception de l'émission peut être manquée. Une diffusion collante peut être vérifiée après avoir été initiée en onResume .

Mise à jour le 23/06/2020

Les diffusions collantes sont dépréciées.

Voir sendStickyBroadcast documentation .

Cette méthode a été supprimée au niveau 21 de l'API.

Les diffusions collantes ne doivent pas être utilisées. Elles n'offrent aucune sécurité (n'importe qui peut y accéder), aucune protection (n'importe qui peut les modifier) et de nombreux autres problèmes. Le modèle recommandé est d'utiliser une diffusion non collante pour signaler que quelque chose a changé, avec un autre mécanisme permettant aux applications de récupérer la valeur actuelle quand elles le souhaitent.

Mettre en œuvre

Intent intent = new Intent("some.custom.action");
intent.putExtra("some_boolean", true);
sendStickyBroadcast(intent);

Ressources

0 votes

Bonjour, je suis confus avec la diffusion collante et l'enregistrement statique de la diffusion. Je viens de lire quelque part que la différence entre l'enregistrement d'une diffusion dans le fichier manifeste et l'enregistrement programmatique est seulement que le premier ne désenregistre pas la diffusion mais qu'elle reste là, tandis que le second désenregistre la diffusion dans la méthode onPause().

0 votes

Remarque : dans la plupart des cas, les diffusions collantes doivent être évitées. Voir le lien dans la réponse de @Nikhil_Katre pour plus d'informations

0 votes

@Shaista : les récepteurs manifestes fonctionnent même lorsque votre application est inactive, alors qu'un récepteur programmatique ne répond que lorsque l'application dans laquelle il est enregistré est en cours d'exécution.

21voto

Nikhil_Katre Points 351

Veuillez noter que les diffusions Sticky sont lourdes pour le système et sont déconseillées. Veuillez lire la note de hackbod dans la discussion sur Diffusions collantes et options de simultanéité sur le groupe des développeurs Android.

@Shouvik, Veuillez préciser le scénario exact dans lequel vous envisagez d'utiliser StickyBroadcasts. Quelqu'un pourra peut-être vous proposer une solution alternative.

11voto

sendStickyBroadcast() effectue un sendBroadcast(Intent) dit "collant", c'est-à-dire que l'intention que vous envoyez reste en place après la fin de la diffusion, de sorte que d'autres personnes peuvent rapidement récupérer ces données par le biais de la valeur de retour de la commande registerReceiver(BroadcastReceiver, IntentFilter) . Dans tous les autres cas, le comportement est le même que celui de sendBroadcast(Intent) . Voici un exemple d'une diffusion collante envoyée par le système d'exploitation ACTION_BATTERY_CHANGED . Lorsque vous appelez registerReceiver() pour cette action -- même avec une nullité BroadcastReceiver -- vous obtenez l'intention qui a été diffusée en dernier pour cette action. Vous pouvez donc l'utiliser pour connaître l'état de la batterie sans nécessairement vous enregistrer pour tous les changements d'état futurs de la batterie.

3voto

arul Points 161

Une intention de diffusion normale n'est plus disponible après avoir été envoyée et traitée par le système. Si vous utilisez la méthode sendStickyBroadcast(Intent), l'intention est collante, ce qui signifie que l'intention que vous envoyez reste disponible une fois la diffusion terminée.

vous vous référez à mon blog : Entrez la description du lien ici

1 votes

J'ai ajouté la mention obligatoire de votre qualité d'auteur du blog vers lequel vous établissez un lien. Vous êtes doit Faites-le vous-même à partir de maintenant, ou vos messages pourront être supprimés comme spam.

0voto

user2369870 Points 1

Lisez ce post sur iphoidtech, il vous expliquera clairement ce qu'est l'intention collante. http://iphoidtech.com/uncategorized/what-is-stcky-intent/

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