Qu’est-ce qu’une diffusion 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 la fin, de sorte que les clients puissent récupérer rapidement ces données sans avoir à attendre la diffusion suivante.

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 autorisation pour utiliser cette intention? Pourquoi donc

 - Allows an application to broadcast sticky intents. 

S’il vous plaît lire l’explication de Mark Murphy ici: quelle est la différence entre sendStickyBroadcast et sendBroadcast dans Android

Voici un exemple abstrait de la façon dont on pourrait utiliser une diffusion collante:

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

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

EDIT: Plus sur les émissions collantes …

Découvrez également removeStickyBroadcast(Intent) et, sur API Level 5 +, isInitialStickyBroadcast() pour une utilisation dans le récepteur onReceive .

J’espère que cela pourra aider.

Veuillez noter que les émissions Sticky sont lourdes pour le système et sont déconseillées. Veuillez lire la note de hackbod dans la discussion sur les «Diffusions diffusées et les options de concurrence» dans le groupe Développeurs Android.

@Shouvik, Veuillez indiquer le scénario exact dans lequel vous envisagez d’utiliser StickyBroadcasts. Quelqu’un peut être en mesure de proposer une solution alternative.

sendStickyBroadcast() effectue un sendBroadcast(Intent) appelé collant, c’est-à-dire que l’intention que vous envoyez rest après la fin de la diffusion, afin que les autres puissent rapidement récupérer ces données via la valeur de registerReceiver(BroadcastReceiver, IntentFilter) À tous les autres égards, cela se comporte comme sendBroadcast(Intent) . ACTION_BATTERY_CHANGED est un exemple d’émission d’ ACTION_BATTERY_CHANGED envoyée via le système d’exploitation. Lorsque vous appelez registerReceiver() pour cette action, même avec un BroadcastReceiver nul, vous obtenez la dernière intention diffusée pour cette action. Par conséquent, vous pouvez l’utiliser pour trouver l’état de la batterie sans nécessairement vous enregistrer pour tous les changements d’état futurs de la batterie.

La valeur d’une émission persistante correspond à la dernière diffusion et est actuellement conservée dans le cache temporaire. Ce n’est pas la valeur d’une émission 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 est obsolète au niveau 21 de l’API. Les diffusions collantes ne doivent pas être utilisées. Ils 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é 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.

Une intention de diffusion normale n’est plus disponible après l’envoi et le traitement par le système. Si vous utilisez la méthode sendStickyBroadcast (Intent), Intent est collant, ce qui signifie que l’intention que vous envoyez rest autour après la fin de la diffusion.

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