qual é a diferença entre sendStickyBroadcast e sendBroadcast no Android

Respostas:

120

Aqui está o que o Android SDK diz sobresendStickyBroadcast() :

Execute um sendBroadcast (Intent) que é "fixo", o que significa que o Intent que você está enviando permanece após a conclusão da transmissão, para que outros possam recuperar rapidamente esses dados por meio do valor de retorno de registerReceiver (BroadcastReceiver, IntentFilter). Em todas as outras formas, ele se comporta da mesma forma que sendBroadcast (Intent).

Um exemplo de transmissão persistente enviada por meio do sistema operacional é ACTION_BATTERY_CHANGED. Quando você chama registerReceiver()para aquela ação - mesmo com um null BroadcastReceiver- você obtém a Intentúltima transmissão para aquela ação. Portanto, você pode usar isso para encontrar o estado da bateria sem necessariamente registrar todas as mudanças futuras de estado da bateria.

CommonsWare
fonte
6
Quão pegajosa é a intenção? Quando você chama registerReceiver uma segunda vez, ele retorna a mesma intenção novamente? (Presumindo que não haja intenção adicional com essa ação.)
Phreed
22
@phreed: "Quando você chama registerReceiver uma segunda vez, ele retorna a mesma intenção novamente?" -- sim. "desligar?" - eles vão embora, como qualquer coisa na RAM. "tela apagada?" - nenhum efeito.
CommonsWare
1
Apenas para acrescentar que as transmissões fixas são estritamente desencorajadas pela Sra. Hackborn: groups.google.com/d/msg/android-developers/8341SaXhvmY/… . É uma postagem antiga, mas provavelmente ainda se aplica
Mr_and_Mrs_D
1
@ Commonsware: não consigo entender seus pontos. Explique com o exemplo de intenção normal e com o exemplo de intenção aderente para o mesmo cenário
Então
4
@Kushal: "Então, qual deve ser a alternativa para uma transmissão fixa agora?" - Eu realmente não posso responder isso, pois não sei qual é o seu caso de uso. Você pode considerar fazer uma nova pergunta sobre o Stack Overflow, em que descreve seus requisitos de negócios, explica como está pensando em resolvê-los por meio de transmissões fixas e pede maneiras alternativas de resolver o mesmo problema.
CommonsWare
54

Tipos : - Local, Normal, Ordenado e Fixo

Transmissão normal

: - use sendBroadcast ()

: - transmissão assíncrona

: - qualquer receptor recebe transmissão e não uma ordem particular

Transmissão ordenada

: - use sendOrderedBroadcast ()

: - transmissão síncrona

: - receptor recebe transmissão em base prioritária

: - também podemos simplesmente abortar a transmissão neste tipo

Transmissão Local

: - use apenas quando a transmissão for usada apenas dentro do mesmo processo

Sticky Broadcast

: - a intenção de transmissão normal não está mais disponível após ter sido enviada e processada pelo sistema.

: - use sendStickyBroadcast (Intent)

: - o intent correspondente é fixo, o que significa que o intent que você está enviando permanece após a conclusão da transmissão.

: - por causa disso, outros podem recuperar rapidamente esses dados por meio do valor de retorno de registerReceiver (BroadcastReceiver, IntentFilter).

: - além deste mesmo que sendBroadcast (Intent).

Umang Kothari
fonte
muito útil ..
Maher Abuthraa
10

sendbroadcast() - transmissão normal, mas podemos definir a prioridade também.

sendstickybroadcast()- a intenção passada com isso será válida para futuros usuários que estão se registrando por meio de código (receptores dinâmicos). A transmissão que ficará com o Android e será retransmitida ou retransmitida para solicitações futuras de quaisquer receptores de transmissão

Quando alguém envia uma transmissão fixa usando, sendstickyBroadcast(intent);então, essa transmissão estará disponível para os futuros usuários que estiverem usando receptores dinâmicos.

Mas agora você não deve usar o sendStickyBroadcast()método, ele está obsoleto

Da documentação do Android:

Este método foi descontinuado na API nível 21. Broadcasts fixos não devem ser usados. Eles não fornecem segurança (qualquer pessoa pode acessá-los), nenhuma proteção (qualquer pessoa pode modificá-los) e muitos outros problemas. O padrão recomendado é usar uma transmissão não aderente para relatar que algo mudou, com outro mecanismo para aplicativos para recuperar o valor atual sempre que desejado

Eu espero que isso ajude.

Rajesh
fonte