본문 바로가기
Programming/Android Java

Processing Ordered Broadcasts

by 개Foot/Dog발?! 2014. 8. 24.

URL : http://nmshome.tistory.com/15

원본URL : http://android-developers.blogspot.kr/2011/01/processing-ordered-broadcasts.html


.....


이 포스트 에서는 순서가 정해진 브로드캐스트 (Ordered Broadcast) 에 관해서 이야기 하고자 합니다. 혹시나 일반적인 브로드캐스트가 무엇이고 어떤식으로 동작하는지에 관해 궁금하신 분은 안드로이드 개발자 사이트 를 미리 참고하시면 좋을 것 같네요.


.....


순서가 없는 일반적인 브로드캐스트 인텐트는 '이론상' 등록된 모든 리시버에게 동시에 전달됩니다. 다시 말해, 어플리케이션 개발자의 입장에서 생각해 본다면, 일반적인 브로드캐스트를 수신하는 어떤 리시버는 동일한 브로드캐스트를 수신하는 다른 리시버와 독립적으로 동작하며, 서로 간에 상호 작용 할 수 있는 인터페이스가 존재하지 않습니다. 간단한 예로, ACTION_BATTERY_LOW 와 같은 인텐트를 들 수 있겠습니다. 여러분은 해당 브로드캐스트를 수신하는 리시버를 구현할 수는 있지만, 리시버 내부에서 또 다른 리시버가 이 인텐트를 수신할 수 없도록 하거나, 송신되는 내용을 변경하는 등의 일을 할 수는 없습니다



 이와는 다르게, 순서 있는 브로드 캐스트 (Ordered Broadcast) 는, 등록된 각각의 리시버에 정해진 순서대로 전달됩니다. (이 순서는 여러분이 메니페스트 상에 리시버를 정의할 때 설정해둔 android:priority 속성 값에 의해 결정됩니다. 숫자가 높을 수록 우선 순위가 높다고 생각하시면 됩니다.) 한 번에 하 나씩 차례로 리시버가 동작하기 때문에, 리시버 내부에서 브로드 캐스트 전송 작업을 중지 시켜, 자신 보다 우선 순위가 낮은 리시버들은 이 메세지를 전달 받지 못하도록 하거나, setResult() / getResult() 등의 메서드를 이용하여 전달될 메세지의 내용을 수정하거나 상위 리시버가 전달해준 내용을 확인 할 수 있습니다.


.....


리시버 Priority 에 관에 알아 두어야 할 사항

NEW_OUTGOING_CALL 의 경우, 0 priority 는 전화 수신을 막기 위한 용도로만 사용되어야 한다. 

같은 priority 를 갖는 리시버도 순서에 따라 한 번에 하나 씩 수행된다. 단 그 순서는 항상 다를 수 있다.

Priority 값으로 항상 0 보다 큰 값을 사용해야한다. 음수 값은 시스템에서만 사용되어야 하며, 이를 지키지 않으면 플랫폼 전체가 오작동 할 수 있다.


결론

 세상에는 다른 어플리케이션과 사이좋게 지내지 못하는 프로그램들이 있습니다. 혹시 이번 포스트를 읽으며, 자신이 작성한 프로그램도 그 중 한가지라는 생각이 드시는 분은 꼭 관련 내용을 수정해 주시면 좋겠습니다.그러면 안드로이드 개발자들도 그리고 사용자들도 좀더 행복해 질 것 입니다. 혹시, 다른 어플리케이션과 좀 더 친하게 지내고 싶으신 분들은 개발자 사이트의 Desigining for Seamless(번역) 포스트를 읽어 보셔도 좋겠습니다.