android - studio - ¿Qué es una Difusión Fija?
fragment set listener (5)
El valor de una emisión fija es el valor que se emitió por última vez y actualmente se almacena en la memoria caché. Este no es el valor de una transmisión que se recibió en este momento. Supongo que puede decir que es como una cookie del navegador a la que puede acceder en cualquier momento. La difusión adhesiva ahora está en desuso:
Este método quedó obsoleto en el nivel de API 21. Las transmisiones fijas no deberían utilizarse. No proporcionan seguridad (cualquiera puede acceder a ellos), no hay protección (cualquiera puede modificarlos) y muchos otros problemas. El patrón recomendado es utilizar una transmisión no adhesiva para informar que algo ha cambiado, con otro mecanismo para que las aplicaciones recuperen el valor actual siempre que lo desee.
Me encontré con este término en la documentación de Android con la definición que lo acompaña
Se trata de transmisiones cuyos datos se guardan en el sistema una vez finalizados, de modo que los clientes puedan recuperar esos datos rápidamente sin tener que esperar a la siguiente transmisión.
Qué significa eso? ¿Puede alguien explicar su uso con un ejemplo particular? Creo que tenemos que solicitar un permiso para usar esta intención? ¿Porque?
<uses-permission android:name="android.permission.BROADCAST_STICKY"/> - Allows an application to broadcast sticky intents.
Lea la explicación de Mark Murphy aquí: cuál es la diferencia entre sendStickyBroadcast y sendBroadcast en Android
Aquí hay un ejemplo abstracto de cómo se podría usar una transmisión fija:
Intent intent = new Intent("some.custom.action");
intent.putExtra("some_boolean", true);
sendStickyBroadcast(intent);
Si está escuchando esta transmisión en una actividad que estaba congelada (en pausa), podría perderse el evento real. Esto le permite verificar la transmisión después de que se disparó (en Repetición).
EDITAR: Más sobre emisiones fijas ...
También consulte removeStickyBroadcast(Intent)
, y en API Level 5 +, isInitialStickyBroadcast()
para usar en Receiver''s onReceive
.
Espero que ayude.
Tenga en cuenta que las transmisiones fijas son pesadas en el sistema y no se recomiendan. Lea la nota de hackbod en la discusión sobre '' Difusiones fijas y opciones de concurrencia'' en el grupo de Desarrolladores de Android.
@Shouvik, especifique el escenario exacto en el que está considerando usar StickyBroadcasts. Alguien puede sugerir una solución alternativa.
Una intención de transmisión normal ya no está disponible después de que el sistema la envió y procesó. Si usa el método sendStickyBroadcast (Intención), la intención es adhesiva, lo que significa que la intención que está enviando se mantiene después de que se complete la transmisión.
te refieres a mi blog: ingresa la descripción del enlace aquí
sendStickyBroadcast()
realiza un sendBroadcast(Intent)
conocido como "sticky", es decir, el Intent que está enviando se queda después de que se completa la transmisión, para que otros puedan recuperar esos datos rápidamente a través del valor de retorno de registerReceiver(BroadcastReceiver, IntentFilter)
. En todos los demás aspectos, esto se comporta de la misma manera que sendBroadcast(Intent)
. Un ejemplo de transmisión ACTION_BATTERY_CHANGED
enviada a través del sistema operativo es ACTION_BATTERY_CHANGED
. Cuando llama a registerReceiver()
para esa acción, incluso con un BroadcastReceiver
nulo, obtiene la intención que se emitió por última vez para 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.