¿Cuál es la diferencia entre sendStickyBroadcast y sendBroadcast en Android?

Respuestas:

120

Esto es lo que dice el SDK de AndroidsendStickyBroadcast() :

Realice un sendBroadcast (Intent) que sea "pegajoso", lo que significa que el Intent que está enviando permanece después de que se completa la transmisión, para que otros puedan recuperar rápidamente esos datos a través del valor de retorno de registerReceiver (BroadcastReceiver, IntentFilter). De todas las demás formas, esto se comporta igual que sendBroadcast (Intent).

Un ejemplo de una transmisión permanente enviada a través del sistema operativo es ACTION_BATTERY_CHANGED. Cuando pides registerReceiver()esa acción, incluso con un null BroadcastReceiver, obtienes la Intentúltima transmisión de esa acción. Por lo tanto, puede usar esto para encontrar el estado de la batería sin registrarse necesariamente para todos los cambios de estado futuros en la batería.

CommonsWare
fuente
6
¿Qué tan pegajosa es la intención? Cuando llamas a registerReceiver por segunda vez, ¿devuelve la misma intención nuevamente? (Suponiendo que no hay ninguna intención adicional con esa acción)
phreed
22
@phreed: "Cuando llamas a registerReceiver por segunda vez, ¿te devuelve la misma intención de nuevo?" -- si. "¿corriente cortada?" - desaparecen, al igual que cualquier cosa en RAM. "¿pantalla apagada?" -- sin efecto.
CommonsWare
1
Solo para agregar que la Sra. Hackborn desaconseja estrictamente las transmisiones pegajosas: groups.google.com/d/msg/android-developers/8341SaXhvmY/… . Es una publicación antigua, pero probablemente todavía se aplica
Mr_and_Mrs_D
1
@ Commonsware: No puedo entender su points.Explain con la intención ejemplo normal y con la intención ejemplo pegajosa para scenario.Then mismos será muy útil para mí tener una idea clara
SIVAKUMAR.J
4
@Kushal: "Entonces, ¿cuál debería ser una alternativa para la transmisión fija ahora?" - Realmente no puedo responder eso, ya que no sé cuál es su caso de uso. Podría considerar hacer una nueva pregunta de Stack Overflow, en la que describa los requisitos de su negocio, explique cómo pensaba resolverlo a través de transmisiones adhesivas y solicite formas alternativas de resolver ese mismo problema.
CommonsWare
54

Tipos : - local, normal, ordenado y pegajoso

Transmisión normal

: - use sendBroadcast ()

: - difusión asincrónica

: - cualquier receptor recibe difusión sin ningún orden en particular

Emisión ordenada

: - use sendOrderedBroadcast ()

: - difusión sincrónica

: - el receptor recibe difusión en base prioritaria

: - también podemos simplemente cancelar la transmisión en este tipo

Transmisión local

: - usar solo cuando la transmisión se usa solo dentro del mismo proceso

Difusión pegajosa

: - el intento de transmisión normal ya no está disponible después de que el sistema lo envió y procesó.

: - use sendStickyBroadcast (Intención)

: - la intención correspondiente es pegajosa, lo que significa que la intención que está enviando permanece después de que se completa la transmisión.

: - debido a esto, otros pueden recuperar rápidamente esos datos a través del valor de retorno de registerReceiver (BroadcastReceiver, IntentFilter).

: - aparte de esto mismo que sendBroadcast (Intent).

Umang Kothari
fuente
muy útil ..
Maher Abuthraa
10

sendbroadcast() - emisión normal, pero también podemos establecer prioridad.

sendstickybroadcast()- La intención pasada con esto se mantendrá para los futuros usuarios que se registren mediante código (receptores dinámicos). La transmisión que se quedará en Android y se volverá a enviar o retransmitir a las solicitudes futuras de cualquier receptor de transmisión.

Cuando alguien envía una transmisión pegajosa usando sendstickyBroadcast(intent);, esa transmisión estará disponible para los futuros usuarios que estén usando receptores dinámicos.

Pero ahora no debes usar el sendStickyBroadcast()método, está en desuso

De la documentación de Android:

Este método quedó obsoleto en el nivel de API 21. No se deben usar transmisiones fijas. No brindan seguridad (cualquiera puede acceder a ellos), ninguna protección (cualquiera puede modificarlos) y muchos otros problemas. El patrón recomendado es usar una transmisión no pegajosa para informar que algo ha cambiado, con otro mecanismo para que las aplicaciones recuperen el valor actual cuando lo deseen

Espero que esto ayude.

Rajesh
fuente