[안드로이드] sendStickyBroadcast() / sendBroadcast()

2014. 6. 12. 11:37Programing/Android / Java

sendBroadcast( Intent intent )

일반적인 broadcast 는 sendBroadcast() 로 전달되는 순간에 등록된 receiver 들의 onReceive() 만을 호출하는 구조로 되어 있습니다.

이 Receiver에 등록이 되지 않는다면 해당 Message를 받을 수 없는 상태가 되어 버리는 것이지요.

요게 일반적인 어플에서는 문제가 되지 않으나, 네트워크 관련 정보를 업데이트 하는 경우에는 문제의 소지가 있습니다.


sendStickyBroadcast( Intent intent )

이로 인해서 나온게 바로 sendStickyBroadcast()입니다.

해당 API로 보낸 broadcast 는 system 에 남아있다가, 새롭게 해당 broadcast 를 받을 수 있는 receiver 가 등록되면 

새로 등록된 receiver 의 onReceive() 를 호출해 줌으로써 받을 수 있게 되는 것입니다.

이를 제거 하고 싶을때는 removeStickyBroadcast() 로 하며, 

이 Sticky broadcast 를 사용하기 위해서는 android.permission.BROADCAST_STICKY permission 이 필요합니다. 

그렇지 않으면 SecurityException 이 발생합니다.

안드로이드 시스템에서 아래와 같은 항목들이 이 API를 사용하고 있습니다.

SPN_STRINGS_UPDATED_ACTION

ACTION_NETWORK_SET_TIMEZONE

ACTION_NETWORK_SET_TIME

CONNECTIVITY_ACTION