¿Qué es una transmisión fija?

90

Encontré este término en la documentación de Android con la definición adjunta

Se trata de transmisiones cuyos datos se mantienen en el sistema después de haber finalizado, de modo que los clientes pueden recuperar rápidamente esos datos sin tener que esperar a la siguiente transmisión.

Qué significa eso? ¿Alguien puede elaborar su uso con un ejemplo en 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.
Shouvik
fuente
3
08 / Feb / 2019, para cualquiera que busque una transmisión pegajosa y terminó aquí, del documento oficial Sticky broadcasts should not be used. They provide no security (anyone can access them), no protection (anyone can modify them), and many other problems. The recommended pattern is to use a non-sticky broadcast to report that something has changed, with another mechanism for apps to retrieve the current value whenever desired.
fangzhzh

Respuestas:

110

Si una actividad llama onPausecon una transmisión normal, es posible que se pierda la recepción de la transmisión. Una transmisión fija se puede verificar después de que se inició en onResume.

Actualización 23/6/2020

Las transmisiones fijas están en desuso.

Ver sendStickyBroadcastdocumentación .

Este método quedó obsoleto en el nivel 21 de API.

No se deben utilizar 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.

Implementar

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

Recursos

Paul Burke
fuente
Hola, me estoy confundiendo con la transmisión fija con el registro estático de la transmisión. Acabo de leer en alguna parte que la diferencia entre registrar una transmisión en el archivo de manifiesto y registrarse programáticamente es solo que el siguiente no cancela el registro de la transmisión, sino que permanece allí, mientras que el último elimina el registro de la transmisión en el método onPause ().
Shaista Naaz
Nota: en la mayoría de los casos, se deben evitar las transmisiones pegajosas. Vea el enlace en la respuesta de @Nikhil_Katre para más información
gMale
@Shaista: los receptores de manifiesto funcionan incluso cuando su aplicación está inactiva, mientras que un receptor programático solo responde cuando la aplicación en la que está registrado se está ejecutando
gMale
@gmale Entonces, si estamos en actividad y estamos en onPause () y hemos llamado a unregisterReceiver () ... ¿Recibiremos la transmisión cuando reanudemos en onResume ()
Kushal
1
@PaulBurke No encontré el nombre Mark Murphy en el enlace anterior. Este enlace me redirige a la pregunta, no a la respuesta exacta. ¿Puede actualizar la URL?
Vishal Chhodwani
11

sendStickyBroadcast()realiza un sendBroadcast(Intent)conocido como pegajoso, es decir, 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 nulo BroadcastReceiver, obtienes el Intent que se transmitió por última vez para esa acción. Por lo tanto, puede usar esto para encontrar el estado de la batería sin necesariamente registrarse para todos los cambios de estado futuros en la batería.

Narendra Motwani
fuente
8

El valor de una transmisión permanente es el valor que se transmitió por última vez y se encuentra actualmente en la memoria caché permanente. 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 transmisión permanente ahora está obsoleta, según los documentos para los métodos de transmisión permanente ( p . Ej. ):

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.

Lou Morda
fuente
3

Una intención de transmisión normal ya no está disponible después de que el sistema la haya enviado y procesado. Si usa el método sendStickyBroadcast (Intent), el Intent es pegajoso, lo que significa que el Intent que está enviando permanece después de que se completa la transmisión.

se refiere a mi blog: ingrese la descripción del enlace aquí

Arul Pandian
fuente
1
He agregado la divulgación requerida de su autoría del blog al que está vinculando. Usted debe hacer esto por sí mismo a partir de ahora, o sus mensajes están sujetos a ser eliminados como spam.
Andrew Barber