ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 브로드캐스트 리시버(Broadcast Receiver)
    Android 2024. 8. 28. 13:06

    정의

    - 시스템에 부팅 완료와 같은 특정 상황이 발생할 때 (= 이벤트가 발생하면) 실행되는 컴포넌트

    - 줄여서 리시버라고 함. 

    - 해석하면 '방송 수신기' → 시스템에서 특정 상황이 발생했을 때 이를 받아서 처리하는 수신기인 브로드캐스트 리시버를 앱에 장착한다.

     

    실행 방법

    안드로이드 4대 컴포넌트 중 하나이므로, 시스템에 인텐트를 전달하여 실행한다.

     

    브로드캐스트 리시버 생성/등록

    class MyReceiver : BroadcastReceiver() {
    	override fun onReceive(context: Context, intent: Intent) {
        	// 다른 컴포넌트에서 해당 리시버를 실행하려고 인텐트를 시스템에 전달하면, 리시버의 onReceive() 함수가 자동 호출된다.
            // intent -> 자신을 호출한 인텐트 객체를 매개변수로 전달받음
            // 해당 함수는 실행한 후 10초 이내에 완료할 것을 권장함 -> 오래 걸리는 작업을 담기에는 부적절함
            // 해당 함수가 실행을 마치면 리시버 객체는 소멸됨
        }
    }

     

    브로드캐스트 리시버의 생명주기 함수는 onReceive() 하나 뿐이다.

    이 또한 안드로이드 4대 컴포넌트 중 하나이므로 매니페스트 파일에 등록한다.

    <receiver
    	android:name=".MyReceiver"
        android:enabled="true"
        android:exported="true"/>

     

    name 속성을 필수이고, 리시버를 명시적 인텐트로 실행하는 경우 클래스명(android:name)만 등록하고, 암시적 인텐트로 실행하는 경우는 <intent-filter> 태그를 선언해야 한다.

    브로드캐스트 리시버 동작 원리

     

    브로드캐스트 리시버 동적 등록/해제

    메니페스트에 등록하지 않으면 코드에서 동적으로 등록하는 방법이 있다.

    1. 객체 생성

    // 다른 컴포넌트(액티비티, 서비스)에서 작성한 코드
    // 리시버 객체 생성
    val receiver = object : BroadcastReceiver() {
    	override fun onReceive(context: Context?, intent: Intent) {
        	...
        }
    }

     

    2. 시스템에 등록

    val filter = IntentFilter("ACION_RECEIVER")
    registerReceiver(receiver, filter)

     

    해당 코드를 통해 리시버를 시스템에 등록할 수 있다. (객체만 만들었을땐 시스템에 등록되지 않는다.)

    이렇게 하면 매니페스트에 등록하지 않아도 시스템에서 리시버의 존재를 인지한다.

    registerReceiver 로 등록한 리시버는 사용 후 필요 없으면 해제해야 한다.

     

    3. 리시버 해제

    unregisterReceiver(receiver)

    브로드캐스트 리시버 실행

    메니페스트 파일에 등록 O
    (intent-filter 사용)
    암시적 인텐트 실행불가
    (원인: 백그라운드 제약)
    메니페스트 파일에 등록 X
    (코드에서 동적 등록)
    암시적 인텐트 실행가능

     

    val intent = Intent(this, MyReceiver::class.java)
    sendBroadcast(intent)

     

    해당 코드로 리시버 정보를 담은 인텐트를 시스템에 전달한다.

    전달한 후 시스템은 리시버 객체를 생성하여 실행한다.

    실행 대상 브로드캐스트 리시버 수 동작
    없음 실행한 곳에서 오류 발생X
    1개 정상 실행
    여러개 모두 실행

     

    'Android' 카테고리의 다른 글

    서비스 생명주기 - startService/bindService  (0) 2024.09.12
    안드로이드 기본 앱과 연동하기 - 갤러리 앱  (3) 2024.09.05
    Activity Component  (0) 2024.08.13
    Material Library  (0) 2024.07.31
    ReadMe 작성 추천 링크  (0) 2024.07.02
Designed by Tistory.