2010-08-16 3 views
73

나는 첨부 된 정의와 안드로이드 문서에서이 용어를 건너 왔어요스티커 방송이란 무엇입니까?

다음 기다릴 필요없이 고객이 신속하게 데이터를 검색 할 수 있도록 다음은, 그 데이터를 마친 후 시스템에서 개최되는 방송입니다 방송.

이게 무슨 의미입니까? 특정 사례를 통해 그 사용을 정교하게 해석 할 수 있습니까? 이 의도를 사용하기위한 허가를 요청해야한다고 생각합니다. 왜 그렇게?

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> - Allows an application to broadcast sticky intents. 

답변

96

여기에 마크 머피의 설명을 읽어 보시기 바랍니다 : 당신이 활동이 방송을 수신하는 경우

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

: 여기 what is the difference between sendStickyBroadcast and sendBroadcast in Android

하나가 끈적 브로드 캐스트를 사용하는 방법의 추상적 인 예입니다 고정 된 (onPause) 경우 실제 이벤트를 놓칠 수 있습니다. 이렇게하면 방송이 시작된 후 방송을 확인할 수 있습니다 (onResume).

편집 : 끈적 방송에 더 많이 ...

는 또한 removeStickyBroadcast(Intent)을 확인하고, API 레벨 5 +, 수신기의 onReceive의 사용에 대한 isInitialStickyBroadcast()합니다.

희망이 있습니다.

+0

안녕하세요, 정적 방송과 정적 방송을 혼동하고 있습니다. 방금 매니페스트 파일에 브로드 캐스트를 등록하는 것과 프로그래밍 방식으로 등록하는 것의 차이점은 브로드 캐스트를 등록 취소하지 않지만 나중에 브로드 캐스트가 onPause() 메서드에서 브로드 캐스트를 등록 취소한다는 것입니다. –

+0

참고 : 대부분의 경우 끈적 거리는 방송은 피해야합니다. 자세한 내용은 [@Nikhil_Katre의 답변에있는 링크] (http://groups.google.com/group/android-developers/browse_thread/thread/f37e3549a5e1be66?pli=1)를 참조하십시오. – gMale

+0

@Shaista : 매니페스트 수신기는 귀하의 앱은 휴면 상태이지만 프로그램 수신기는 등록 된 애플리케이션이 실행될 때만 응답합니다. – gMale

20

끈적 거리는 방송은 시스템에서 무거 우며 사용하지 마십시오. Android Developers 그룹의 'Sticky Broadcasts and Concurrency Options'에 대한 토론에서 hackbod의 메모를 읽으십시오.

@Shouvik, StickyBroadcasts를 사용하려는 정확한 시나리오를 지정하십시오. 누군가 다른 대안을 제안 할 수 있습니다.

+0

+1에서 끈적 거리는 브로드 캐스트의 단점을 지적했다. 당신의 애플리케이션이 크래쉬한다면 (예, try/catch로 모든 것을 감싸고 Thread.setDefaultUncaughtExceptionHandler()를 등록했다하더라도 일어날 수있다. '), 당신은 다음 호출에서 신중하게 다루어야하는 무언가에 갇혀있다. 간단히 말해서 SharedPreferences 및 ContentProvider와 마찬가지로 성가 시거나 너무 복잡 할 수 있습니다. – ateiob

+0

"시스템이 무거워"는 속도가 느려질 수 있습니다. 이 경기 둔화는 언제 나타 납니까? 응용 프로그램을 실행하는 동안 또는 실행하지 않고도? Adobe AIR 응용 프로그램은이 권한을 요청해야하므로 AIR 응용 프로그램을 프로그래밍 할 때 피할 수없는 무언가입니다. AIR 런타임을 응용 프로그램에 포함 시키거나 사용자가 Adobe AIR 런타임을 설치하도록 허용하는 경우이 권한을 요청하는 응용 프로그램에서이 기능을 요청하십시오. – OMA

+0

여기는 내가 성취하려고하는 시나리오이고 끈적 거리는 방송이 성취하게 될지 궁금해하고 있습니다. 서비스가 종료되고 플래시와 같은 외부 리소스를 건드리지 않고도 메모리에있는 서비스의 상태를 유지해야합니다. 나는 끈적임없이이 작업을 수행 할 수 있지만 인 텐트가 연속적으로 전달되는 경우 상태를 업데이트하는 동시성 문제가 발생합니다. – Michael

1

정상적인 방송 인 텐트는 시스템에서 보내고 처리 된 후에 더 이상 사용할 수 없습니다. sendStickyBroadcast (Intent) 메소드를 사용하면 의도는 끈적입니다. 즉, 브로드 캐스트가 완료된 후에 보내려는 인 텐트가 계속 남아있게됩니다.

당신은 내 블로그를 참조하십시오 enter link description here

+1

나는 링크하고있는 블로그의 저자명에 대한 필요한 공개를 추가했습니다. 지금부터해야합니다. 그렇지 않으면 게시물이 스팸으로 삭제 될 수 있습니다. –

7

sendStickyBroadcast() 다른 사람들이 빠르게의 반환 값을 통해 데이터를 검색 할 수 있도록 텐트, 즉 당신이 브로드 캐스트가 완료 주위 후 숙박을 보내고, 끈적로 알려진 sendBroadcast(Intent)을 수행 registerReceiver(BroadcastReceiver, IntentFilter). 다른 모든 방법에서는 sendBroadcast(Intent)과 동일하게 동작합니다. 운영 체제를 통해 전송되는 고정 브로드 캐스트의 한 예는 ACTION_BATTERY_CHANGED입니다. 해당 작업에 대해 registerReceiver()으로 전화하면 (심지어 BroadcastReceiver) - 해당 작업에 대해 마지막으로 브로드 캐스트 된 인 텐트가 표시됩니다. 따라서이 기능을 사용하여 배터리의 모든 상태 변경 사항을 반드시 등록하지 않아도 배터리의 상태를 찾을 수 있습니다.

7

스티키 브로드 캐스트의 값은 마지막으로 브로드 캐스트되었으며 현재 스티키 캐시에 보관되어있는 값입니다. 이것은 지금받은 방송의 가치가 아닙니다. 언제든지 액세스 할 수있는 브라우저 쿠키와 같다고 말할 수 있습니다.고정 방송은 이제 비추천입니다 :

이 메소드는 API 레벨 21에서 지원되지 않습니다. 끈적한 방송은 이어야합니다. 보안 (아무에게도 액세스 할 수 있음), 보호 (누구든지 수정할 수 있음) 및 기타 많은 문제를 제공하지 않습니다. 권장 패턴은 끈적 거리지 않는 브로드 캐스트를 사용하여 무언가가 변경되었음을보고하고 앱이 원하는 경우 언제든지 의 현재 값을 검색하는 또 다른 메커니즘을 사용하는 것입니다.

+1

참조 된 문서에 대한 링크가 도움이 될 것입니다. –

+0

참조 된 문서를 기억할 수 없습니다. 이것이 가난한 에티켓이라는 것을 알지 못했지만, 이제 나는 왜 분명히 볼 수 있습니다. Def를 복사하여 어딘가에서 붙여 넣으십시오. –

관련 문제