순서형 브로드캐스트

Android 순서형 브로드캐스트 sendOrderedBroadcast

순서형 브로드캐스트는 비순서형 브로드캐스트(일반 sendBroadcast)와 대비되는 개념으로, 직렬로 하나씩 전달되는 브로드캐스트이며 면접에서 자주 출제되는 핵심 문제입니다.

1. 순서형 브로드캐스트 특징

  1. 직렬 실행(선형 전달):리시버는 순서대로 하나씩 수신합니다. 이전 리시버의 처리가 끝나야 다음 리시버로 전달되며 동시에 수신하지 않습니다.
  2. 브로드캐스트 중단 가능:리시버 onReceive() 안에서 abortBroadcast()를 호출하면 브로드캐스트가 종료되고, 뒤에 있는 모든 리시버는 이 브로드캐스트를 받지 못합니다.
  3. 우선순위가 수신 순서를 결정:android:priority. 숫자가 클수록 우선순위가 높고 브로드캐스트를 먼저 받습니다.
    • 값 범위:-1000 ~ 1000
    • 예시:demo1의 priority=100, demo2에 더 작은 값을 설정하면 demo1이 먼저 수신, demo2가 나중에 수신
  4. 리시버끼리 브로드캐스트 데이터를 담고 수정한 뒤 뒤로 전달할 수 있습니다.

참고:비순서형 브로드캐스트 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. 순서형 브로드캐스트 전체 실행 흐름

  1. Demo1이 sendOrderedBroadcast를 호출하여 브로드캐스트 전송
  2. 시스템이 Action과 일치하는 모든 브로드캐스트 리시버를 찾고, priority 내림차순으로 정렬
  3. 우선순위 100(Demo1 리시버)이 먼저 수신 → onReceive 실행
    • 내부에서 abortBroadcast() 호출 시 즉시 종료, Demo2(priority50)는 브로드캐스트를 수신할 수 없음
    • abortBroadcast를 호출하지 않으면 브로드캐스트가 Demo2 리시버로 계속 전달
  4. Demo2 리시버가 onReceive 실행

비교표

특성비순서형 브로드캐스트 sendBroadcast순서형 브로드캐스트 sendOrderedBroadcast
수신 순서병렬, 거의 동시 수신, 순서 없음직렬, priority 우선순위 기준, 높은 우선순위 먼저 수신
브로드캐스트 중단중단 불가, abortBroadcast 무효abortBroadcast 호출로 중단 가능
데이터 전달수정된 데이터를 다음 수신자에게 전달 불가Intent 데이터를 수정하여 뒤로 전달 가능

순서형 브로드캐스트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다