web-dev-qa-db-fra.com

Quelle est la différence entre sendStickyBroadcast et sendBroadcast dans Android

Quelle est la différence entre sendStickyBroadcast et sendBroadcast dans Android?

102
cobject

Voici ce que dit le Android SDK à propos de sendStickyBroadcast() :

Effectuez un sendBroadcast (Intent) "collant", ce qui signifie 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 via la valeur de retour de registerReceiver (BroadcastReceiver, IntentFilter). À tous autres égards, cela se comporte de la même manière 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 un nullBroadcastReceiver, vous obtenez le Intent qui a été diffusé 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.

117
CommonsWare

Types: - Local, Normal, Commandé et Collant

diffusion normale

: - utilise sendBroadcast ()

: - diffusion asynchrone

: - tout récepteur reçoit une émission et non une commande particulière

diffusion ordonnée

: - utilise sendOrderedBroadcast ()

: - diffusion synchrone

: - récepteur reçoit la diffusion en base prioritaire

: - on peut aussi simplement abandonner la diffusion dans ce type

diffusion locale

: - à utiliser uniquement lorsque broadcast est utilisé uniquement dans le même processus

diffusion collante

: - l'intention de diffusion normale n'est plus disponible après son envoi et son traitement par le système.

: - utilise sendStickyBroadcast (Intent)

: - l'intention correspondante est collante, c'est-à-dire que l'intention que vous envoyez reste valable une fois la diffusion terminée.

: - de ce fait, d’autres peuvent rapidement extraire ces données grâce à la valeur de retour registerReceiver (BroadcastReceiver, IntentFilter).

: - en dehors de cela, comme sendBroadcast (Intent).

49
Umang Kothari

sendbroadcast() - diffusion normale, mais nous pouvons également définir la priorité.

sendstickybroadcast() - l'intention transmise avec ce paramètre restera valable pour les futurs utilisateurs qui s'enregistrent via du code (récepteurs dynamiques). La diffusion qui restera avec Android et sera rediffusée ou rediffusée pour les futures demandes de tous les récepteurs de diffusion

Quand quelqu'un envoie une diffusion persistante en utilisant sendstickyBroadcast(intent);, cette diffusion sera disponible pour les futurs utilisateurs qui utilisent des récepteurs dynamiques.

Mais maintenant, vous ne devriez pas utiliser la méthode sendStickyBroadcast(), elle est obsolète

De Android Documentation:

Cette méthode était obsolète au niveau 21 de l'API. Les diffusions collantes 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.

J'espère que ça aide.

10
Rajesh