web-dev-qa-db-fra.com

Qu'est-ce qu'une diffusion collante?

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

Il s’agit d’émissions dont les données sont conservées par le système une fois l’opération terminée, afin que les clients puissent les récupérer rapidement sans attendre la prochaine diffusion.

Qu'est-ce que ça veut dire? Quelqu'un peut-il élaborer son utilisation avec un exemple particulier? Je crois que nous devons demander une permission pour utiliser cette intention? Pourquoi

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

Veuillez lire l'explication de Mark Murphy ici: quelle est la différence entre sendStickyBroadcast et sendBroadcast sous Android

Voici un exemple abstrait de l’utilisation d’une émission collante:

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

Si vous écoutez cette émission dans une activité qui a été gelée (onPause), vous risquez de manquer l'événement réel. Cela vous permet de vérifier la diffusion après son déclenchement (onResume).

EDIT: Plus d'informations sur les émissions collantes ...

Vérifiez également removeStickyBroadcast(Intent) et sur l'API de niveau 5 +, isInitialStickyBroadcast() pour une utilisation dans la variable onReceive du récepteur.

J'espère que ça t'as aidé.

105
Paul Burke

Veuillez noter que les émissions collantes sont lourdes sur le système et sont découragées. Veuillez lire la note de hackbod dans la discussion sur "Diffusions persistantes et options de simultanéité" dans le groupe Android développeurs).

@Shouvik, Spécifiez le scénario exact dans lequel vous envisagez d'utiliser StickyBroadcasts. Quelqu'un pourra peut-être suggérer une solution alternative.

21
Nikhil_Katre

sendStickyBroadcast() exécute une sendBroadcast(Intent) dite collante, c’est-à-dire que l’intention que vous envoyez est conservée une fois la diffusion terminée, afin que d’autres puissent récupérer rapidement ces données grâce à la valeur de retour de registerReceiver(BroadcastReceiver, IntentFilter). À tous les autres égards, cela se comporte de la même façon que sendBroadcast(Intent). Un exemple de diffusion persistante envoyée via le système d'exploitation est ACTION_BATTERY_CHANGED. Lorsque vous appelez registerReceiver() pour cette action - même avec une valeur nulle BroadcastReceiver - vous obtenez l'intention qui a été diffusée pour la dernière fois pour cette action. Par conséquent, vous pouvez utiliser ceci pour trouver l'état de la batterie sans nécessairement enregistrer tous les changements d'état futurs de la batterie.

8
Narendra Motwani

La valeur d'une diffusion collante est la valeur de la dernière diffusion et est actuellement conservée dans le cache collant. Ce n'est pas la valeur d'une émission qui a été reçue en ce moment. Je suppose que vous pouvez dire que c'est comme un cookie de navigateur auquel vous pouvez accéder à tout moment. La diffusion collante est maintenant obsolète:

Cette méthode était obsolète au niveau 21 de l'API. Les diffusions persistantes ne doivent pas être utilisées. Ils ne fournissent aucune sécurité (personne ne peut y accéder), aucune protection (tout le monde peut les modifier) ​​et bien d'autres problèmes. Le modèle recommandé consiste à 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 à tout moment.

8
Lou Morda

Une intention de diffusion normale n'est plus disponible après son envoi et son traitement 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 est conservée une fois la diffusion terminée.

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

2
Arul Pandian