Android 순서형 브로드캐스트 sendOrderedBroadcast
순서형 브로드캐스트는 비순서형 브로드캐스트(일반
sendBroadcast)와 대비되는 개념으로, 직렬로 하나씩 전달되는 브로드캐스트이며 면접에서 자주 출제되는 핵심 문제입니다.
1. 순서형 브로드캐스트 특징
- 직렬 실행(선형 전달):리시버는 순서대로 하나씩 수신합니다. 이전 리시버의 처리가 끝나야 다음 리시버로 전달되며 동시에 수신하지 않습니다.
- 브로드캐스트 중단 가능:리시버
onReceive()안에서abortBroadcast()를 호출하면 브로드캐스트가 종료되고, 뒤에 있는 모든 리시버는 이 브로드캐스트를 받지 못합니다. - 우선순위가 수신 순서를 결정:
android:priority. 숫자가 클수록 우선순위가 높고 브로드캐스트를 먼저 받습니다.- 값 범위:
-1000 ~ 1000 - 예시:demo1의 priority=100, demo2에 더 작은 값을 설정하면 demo1이 먼저 수신, demo2가 나중에 수신
- 값 범위:
- 리시버끼리 브로드캐스트 데이터를 담고 수정한 뒤 뒤로 전달할 수 있습니다.
참고:비순서형 브로드캐스트 sendBroadcast()는 중단할 수 없고 우선순위도 없습니다. 여러 리시버가 거의 동시에 수신합니다
2. 순서형 브로드캐스트 전송 코드(전송자 Demo1)
Intent intent = new Intent("com.foxdevelop.www.senddemo.MY_BROADCAST");
// 순서형 브로드캐스트 전송. 두 번째 매개변수는 권한(null은 권한 제한 없음)
sendOrderedBroadcast(intent, null);
Code language: JavaScript (javascript)
3. 정적 등록 리시버, 우선순위 설정 AndroidManifest.xml
<receiver android:name=".MyReceiver">
<!-- priority 우선순위, 숫자가 클수록 먼저 수신 -->
<intent-filter android:priority="100">
<action android:name="com.foxdevelop.www.senddemo.MY_BROADCAST"/>
</intent-filter>
</receiver>
Code language: HTML, XML (xml)
Demo2 리시버에 100보다 작은 priority, 예를 들어
android:priority="50"을 설정하면 실행 순서:Demo1 리시버 → Demo2 리시버
4. 브로드캐스트 중단 abortBroadcast()
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "사용자 정의 브로드캐스트를 수신했습니다", Toast.LENGTH_LONG).show();
// 순서형 브로드캐스트 중단! 뒤쪽 우선순위가 낮은 리시버는 이 브로드캐스트를 받지 못함
abortBroadcast();
}
Code language: JavaScript (javascript)
핵심:
abortBroadcast()는순서형 브로드캐스트에만 적용;일반 비순서형 브로드캐스트에서 호출하면 효과가 없습니다.- 한 번 중단되면 브로드캐스트 전달 체인이 종료됩니다.
5. 순서형 브로드캐스트 전체 실행 흐름
- Demo1이
sendOrderedBroadcast를 호출하여 브로드캐스트 전송 - 시스템이 Action과 일치하는 모든 브로드캐스트 리시버를 찾고, priority 내림차순으로 정렬
- 우선순위 100(Demo1 리시버)이 먼저 수신 → onReceive 실행
- 내부에서
abortBroadcast()호출 시 즉시 종료, Demo2(priority50)는 브로드캐스트를 수신할 수 없음 - abortBroadcast를 호출하지 않으면 브로드캐스트가 Demo2 리시버로 계속 전달
- 내부에서
- Demo2 리시버가 onReceive 실행
비교표
| 특성 | 비순서형 브로드캐스트 sendBroadcast | 순서형 브로드캐스트 sendOrderedBroadcast |
|---|---|---|
| 수신 순서 | 병렬, 거의 동시 수신, 순서 없음 | 직렬, priority 우선순위 기준, 높은 우선순위 먼저 수신 |
| 브로드캐스트 중단 | 중단 불가, abortBroadcast 무효 | abortBroadcast 호출로 중단 가능 |
| 데이터 전달 | 수정된 데이터를 다음 수신자에게 전달 불가 | Intent 데이터를 수정하여 뒤로 전달 가능 |
순서형 브로드캐스트
Previous: Android 앱 간 브로드캐스트 수신
Next: Android 로컬 브로드캐스트