quelle est la différence entre sendStickyBroadcast et sendBroadcast sous Android

Réponses:

120

Voici ce que dit le SDK AndroidsendStickyBroadcast() :

Effectuez un sendBroadcast (Intent) qui est «permanent», ce qui signifie que l'intention que vous envoyez reste 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). Dans tous les autres cas, 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 null BroadcastReceiver- vous obtenez la Intentdernière diffusion 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 futurs changements d'état de la batterie.

CommonsWare
la source
6
À quel point l'intention est-elle collante? Lorsque vous appelez registerReceiver une deuxième fois, renvoie-t-il à nouveau la même intention? (En supposant qu'aucune intention supplémentaire avec cette action.)
phreed
22
@phreed: "Lorsque vous appelez registerReceiver une deuxième fois, est-ce qu'il retourne à nouveau la même intention?" -- Oui. "éteindre?" - ils disparaissent, comme n'importe quoi dans la RAM. "écran éteint?" -- aucun effet.
CommonsWare
1
Juste pour ajouter que les émissions persistantes sont strictement déconseillées par Mme Hackborn: groups.google.com/d/msg/android-developers/8341SaXhvmY/… . C'est un ancien message mais qui s'applique probablement encore
Mr_and_Mrs_D
1
@ Commonsware: je ne peux pas comprendre vos points.Expliquez avec un exemple d'intention normale et avec un exemple d'intention collante pour le même scénario.Ensuite, il sera utile pour moi d'avoir une idée claire
SIVAKUMAR.J
4
@Kushal: "Alors, quelle devrait être l'alternative à la diffusion collante maintenant?" - Je ne peux pas vraiment répondre à cela, car je ne sais pas quel est votre cas d'utilisation. Vous pouvez envisager de poser une nouvelle question Stack Overflow, dans laquelle vous décrivez vos besoins commerciaux, expliquez comment vous envisagiez de les résoudre via des émissions persistantes et demandez d'autres moyens de résoudre ce même problème.
CommonsWare
54

Types : - Local, normal, ordonné et collant

Diffusion normale

: - utilisez sendBroadcast ()

: - diffusion asynchrone

: - tout récepteur reçoit une émission pas un ordre particulier

Diffusion commandée

: - utilisez sendOrderedBroadcast ()

: - diffusion synchrone

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

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

Diffusion locale

: - à utiliser uniquement lorsque la diffusion est utilisée uniquement dans le même processus

Diffusion collante

: - l'intention de diffusion normale n'est plus disponible une fois qu'elle a été envoyée et traitée par le système.

: - utilisez sendStickyBroadcast (Intent)

: - l'intention correspondante est persistante, ce qui signifie que l'intention que vous envoyez reste une fois la diffusion terminée.

: - à cause de cela, d'autres peuvent récupérer rapidement ces données via la valeur de retour de registerReceiver (BroadcastReceiver, IntentFilter).

: - à part cela même que sendBroadcast (Intent).

Umang Kothari
la source
10

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

sendstickybroadcast()- l'intention passée avec ceci sera valable pour les futurs utilisateurs qui s'inscriront par code (récepteurs dynamiques). L'émission qui restera avec Android et sera rediffusée ou rediffusée aux futures demandes de tous les récepteurs de diffusion

Lorsque 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 sendStickyBroadcast()méthode, elle est obsolète

Depuis la documentation Android:

Cette méthode était obsolète dans l'API niveau 21. Les diffusions persistantes 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 bien d'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 à tout moment.

J'espère que ça aide.

Rajesh
la source