안드로이드에서 BroadcastReceiver를 이용한 명시적 및 암시적 브로드캐스트 전송과 수신에 대해 정리 해 두고자 한다.
BroadcastReceiver는 안드로이드에서 중요한 역할을 하는 컴포넌트로, 애플리케이션에서 다양한 시스템 이벤트를 감지하고 반응할 수 있게 해준다.
정적 및 동적 등록 방법을 이해하고, 명시적 및 암시적 브로드캐스트 전송 방법을 알고 있으면 안드로이드 애플리케이션 개발에 있어 더 효율적으로 BroadcastReceiver를 활용할 수 있다.
BroadcastReceiver란?
BroadcastReceiver는 안드로이드 애플리케이션 구성 요소 중 하나로, 시스템이나 애플리케이션에서 발생하는 다양한 이벤트나 정보를 수신할 수 있는 기능을 제공한다.
예를 들어, 네트워크 상태 변경, 배터리 저전압, 사진 촬영 등의 이벤트를 애플리케이션에서 감지하고 반응할 수 있다.
BroadcastReceiver 등록 방법
1. 정적 등록 (AndroidManifest.xml):
애플리케이션의 AndroidManifest.xml 파일에 <receiver> 태그를 사용하여 BroadcastReceiver를 선언한다.
이 방법은 애플리케이션이 실행되지 않고 있을 때도 시스템이 BroadcastReceiver를 활성화할 수 있게 해 준다
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
2. 동적 등록 (코드 내):
registerReceiver() 메서드를 사용하여 실행 시간에 BroadcastReceiver를 등록할 수 있다.
이 방법은 애플리케이션이 활성 상태일 때만 BroadcastReceiver가 동작하도록 할 때 유용하다.
MyBroadcastReceiver myReceiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(myReceiver, filter);
명시적 vs 암시적 브로드캐스트
- 명시적 브로드캐스트:
특정 컴포넌트(예: BroadcastReceiver)를 직접 지정하여 브로드캐스트를 전송한다.
안드로이드 8.0 (API 레벨 26) 이상에서는 백그라운드 실행 제한으로 인해 명시적 브로드캐스트를 선호한다.
명시적 브로드캐스트의 예시는 다음과 같다.
Intent intent = new Intent(TRIAL_ACTION, MyBroadcastReceiver.class); // MyBroadcastReceiver 클래스가 Action을 받을 수 있도록 명시 돼 있다.
sendBroadcast(intent);
- 암시적 브로드캐스트:
특정 액션을 지정하고, 그 액션을 처리할 수 있는 모든 컴포넌트에 브로드캐스트를 전송한다.
Android 8.0 이상에서는 많은 암시적 브로드캐스트가 제한된다.
암시적 브로드캐스트의 예시는 다음과 같다.
Intent intent = new Intent(TRIAL_ACTION); // 특정한 수신자가 명시되어 있지 않다.
sendBroadcast(intent);
명시적 브로드캐스트와 암시적 브로드캐스트의 차이는 다음과 같다.
명시적 브로드캐스트의 경우에는 수신자 리시버 클래스가 명확하게 지정되어 있어, 무조건 지정된 수신자 리시버 클래스가 액션을 받게 된다는 것이고,
암시적 브로드캐스트의 경우에는 특정한 수신자가 명시되지 않고 특정 액션을 필터링하는 어떤 브로드캐스트 리시버든지 이 액션을 받을 수 있다는 것이다.
위 코드의 경우 명시적 브로드캐스트에서는 TRIAL_ACTION을 MyBroadcastReceiver가 무조건 받게 되는 것이고,
암시적 브로트캐스트에서는 TRIAL_ACTION을 필터링 하고 있는 경우, 어떤 브로드캐스트 리시버든지 TRIAL_ACTION을 받게 되는 것이다.
* 안드로이드 8.0(Oreo) 이상에서는 시스템 리소스의 낭비를 줄이고 배터리 수명을 향상시키기 위해서 암시적 브로드캐스트 제한이 안전한 앱 환경을 위한 조치로 이루어졌다고 한다.
그러나 여전히 일부 상황에서 사용 가능하며, 과거 버전의 안드로이드를 지원하는 애플리케이션의 호환성을 유지하기 위해서도 암시적 브로드캐스트를 이해하고 활용할 필요가 있다.
따라서 안드로이드 애플리케이션 개발을 하는 데 있어, 암시적 브로드캐스트 방법을 알고 있는 것은 여전히 매우 중요하다.
참고 :
https://developer.android.com/reference/android/content/BroadcastReceiver
BroadcastReceiver | Android Developers
developer.android.com
'Android > Android Core' 카테고리의 다른 글
[Android] RecyclerView의 성능 비결: ViewHolder 사용의 중요성 (2) | 2024.04.21 |
---|---|
[Android] 안드로이드에서 FLAG_ACTIVITY_REORDER_TO_FRONT 플래그를 활용한 효율적인 액티비티 관리 (0) | 2024.04.08 |
[Android] 안드로이드에서 WindowManager를 활용하여 윈도우 위치 최상단으로 설정하기 (2) | 2024.04.04 |
[Android] ItemTouchHelper.Callback으로 리사이클러뷰 아이템을 마스터하는 방법: 주요 오버라이드 메서드와 그 역할 (0) | 2024.04.01 |
[ Android ] Android에서 Selector 사용 시 상태 정의 순서의 중요성 이해하기 (1) | 2024.03.26 |