Android에서 sendStickyBroadcast와 sendBroadcast의 차이점은 무엇입니까


답변:


120

Android SDK의 내용은 다음과 같습니다sendStickyBroadcast() .

"sticky"인 sendBroadcast (Intent)를 수행합니다. 즉, 브로드 캐스트가 완료된 후에도 전송중인 인 텐트가 유지되므로 다른 사용자가 registerReceiver (BroadcastReceiver, IntentFilter)의 반환 값을 통해 해당 데이터를 빠르게 검색 할 수 있습니다. 다른 모든 방법에서 이것은 sendBroadcast (Intent)와 동일하게 작동합니다.

운영 체제를 통해 전송되는 고정 브로드 캐스트의 한 가지 예는 ACTION_BATTERY_CHANGED. 당신 registerReceiver()이 그 행동 을 요구할 때 -심지어 null BroadcastReceiver-당신은 Intent그 행동에 대해 마지막 방송 된 것을 얻습니다 . 따라서 배터리의 모든 향후 상태 변경에 대해 반드시 등록하지 않고도이를 사용하여 배터리 상태를 찾을 수 있습니다.


6
의도가 얼마나 끈적한가요? registerReceiver를 두 번 호출하면 동일한 인 텐트가 다시 반환됩니까? (그 행동에 대한 추가 의도가 없다고 가정합니다.)
phreed

22
@phreed : "registerReceiver를 두 번 호출하면 동일한 인 텐트가 다시 반환됩니까?" -- 예. "전력 다운?" -RAM의 모든 것과 마찬가지로 사라집니다. "화면 꺼짐?" -효과 없음.
CommonsWare 2011

1
그냥 끈적 방송이 엄격 미스 Hackborn 낙담하는 것을 추가 : groups.google.com/d/msg/android-developers/8341SaXhvmY/...를 . 오래된 게시물이지만 여전히 적용됩니다
Mr_and_Mrs_D

1
@ Commonsware : 나는 당신의 요점을 이해할 수 없습니다. 일반적인 의도 예제와 같은 시나리오에 대한 끈적한 의도 예제를 사용하여 설명하십시오. 그런 다음 명확한 아이디어를 얻는 데 유용 할 것입니다
SIVAKUMAR.J

4
@Kushal : "그럼 지금 스티키 방송의 대안은 무엇일까요?" -귀하의 사용 사례가 무엇인지 모르기 때문에 실제로 대답 할 수 없습니다. 비즈니스 요구 사항을 설명하고 고정 브로드 캐스트를 통해 해결 방법을 설명하고 동일한 문제를 해결하는 다른 방법을 묻는 새로운 Stack Overflow 질문을 고려할 수 있습니다.
CommonsWare

54

유형 :-로컬, 일반, 정렬 및 고정

일반 방송

:-sendBroadcast () 사용

:-비동기 방송

:-모든 수신기는 특정 순서가 아닌 브로드 캐스트를받습니다.

주문 된 방송

:-sendOrderedBroadcast () 사용

:-동기 방송

:-수신기는 우선 순위 기반에서 브로드 캐스트를 수신합니다.

:-우리는이 유형의 방송을 중단 할 수도 있습니다.

지역 방송

:-브로드 캐스트가 동일한 프로세스 내에서만 사용되는 경우에만 사용

고정 방송

:-시스템에서 전송 및 처리 한 후에는 정상적인 브로드 캐스트 인 텐트를 더 이상 사용할 수 없습니다.

:-sendStickyBroadcast (Intent) 사용

:-해당 인 텐트가 고정되어있어 전송중인 인 텐트가 브로드 캐스트가 완료된 후에도 유지됩니다.

:-이 때문에 다른 사람들은 registerReceiver (BroadcastReceiver, IntentFilter)의 반환 값을 통해 해당 데이터를 빠르게 검색 할 수 있습니다.

:-sendBroadcast (Intent)와 동일합니다.


매우 도움이 ..
Maher Abuthraa

10

sendbroadcast() -일반 방송이지만 우선 순위도 설정할 수 있습니다.

sendstickybroadcast()-이와 함께 전달 된 의도는 코드 (동적 수신기)를 통해 등록하는 향후 사용자를 위해 달라집니다. Android에 고정되며 모든 브로드 캐스트 수신기의 향후 요청에 다시 전달되거나 다시 브로드 캐스트되는 브로드 캐스트

누군가가 스티키 브로드 캐스트를 보내면 sendstickyBroadcast(intent);동적 수신기를 사용하는 미래의 사용자가 해당 브로드 캐스트를 사용할 수 있습니다.

그러나 이제는 사용하지 않는 sendStickyBroadcast()방법을 사용해서는 안됩니다.

Android 문서에서 :

이 메서드는 API 레벨 21에서 더 이상 사용되지 않습니다. 고정 브로드 캐스트를 사용해서는 안됩니다. 보안 (누구나 액세스 가능), 보호 (누구나 수정할 수 있음) 및 기타 많은 문제를 제공하지 않습니다. 권장되는 패턴은 고정되지 않은 브로드 캐스트를 사용하여 무언가 변경되었음을보고하고 앱이 원할 때마다 현재 값을 검색하는 또 다른 메커니즘을 사용하는 것입니다.

이게 도움이 되길 바란다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.