amplitude.init("2e2e5a386856efdf3237cf254a9d14d9"

[개념 콕] 안드로이드 BroadcastReceiver

내일배움캠프 수료생이 개발에 꼭 필요한 핵심 개념만 콕 집어 드립니다.
Jun 07, 2024
[개념 콕] 안드로이드 BroadcastReceiver
✍🏼
안드로이드 입문자 여러분, 정보가 너무 많고 배워야 할 것도 산더미라 어디서부터 시작해야 할지 막막하신가요? 내일배움캠프 수료생들이 4개월 동안 배운 엄선된 안드로이드 핵심 개념을 직접 정리해서 알려 드립니다. 공부하다 막히거나 헷갈리는 개념이 있다면 개념 콕으로 정리해보세요.
 

BroadcastReceiver란?

BroadcastReceiver는 안드로이드 애플리케이션을 구성하는 4대 구성요소 중 하나로, 안드로이드 애플리케이션에서 시스템 또는 앱에서 발생하는 이벤트나 정보를 받아 처리하는 기능을 가지고 있습니다.
출처: 레딧(reddit)
출처: 레딧(reddit)
 

BroadcastReceiver에서 처리할 수 있는 대표적인 Intent 종류

BroadcastReceiver는 일반적으로 Intent 객체를 사용하여 브로드캐스트 메시지를 받습니다. 이 메시지는 처리할 이벤트에 대한 정보와 데이터를 담고 있습니다.
BroadcastReceiver에서 사용되는 Intent
BroadcastReceiver에서 사용되는 Intent
 
여기서 사용되는 Intent에 대해서 자세하게 설명을 하자면
  • ACTION_TIME_TICK : 매 분마다 수신
  • ACTION_TIME_CHANGED : 폰의 시간이 수동으로 변했을 때 (설정으로 수정했을 때)
  • ACTION_BOOT_COMPLETED : 부팅이 끝났을 때 (RECEIVE_BOOT_COMPLETED 권한 등록 필요)
  • ACTION_PACKAGE : 어플 관련 Intent
  • ACTION_POWER : 충전 관련 Intent
 

BroadcastReceiver의 장단점

장점

  • Loose Coupling(느슨한 결합도): 다른 컴포넌트와의 강한 의존성 없이 이벤트를 수신할 수 있기 때문에 유지 보수 및 확장성 측면에서 긍정적입니다.
  • 시스템 이벤트 수신: 시스템 수준의 이벤트를 쉽게 캐치하여 처리할 수 있습니다.
  • 다중 수신: 하나의 이벤트를 여러 BroadcastReceiver에서 수신할 수 있습니다.
  • 리소스 효율성: 앱이 실행되지 않는 상태에서도 BroadcastReceiver는 작동할 수 있기 때문에, 필요한 경우에만 앱을 깨워 리소스를 절약할 수 있습니다.

단점

  • 비동기성: BroadcastReceiver는 비동기적으로 동작하기 때문에 실행 순서를 보장할 수 없습니다.
  • 리소스 사용: 이벤트가 빈번하게 발생하면 리소스 사용이 증가할 수 있습니다.
  • 보안 이슈: 민감한 데이터를 전송할 때는 다른 앱에 의해 수신될 가능성이 있으므로 주의해야 합니다.
  • 복잡성 증가: 여러 BroadcastReceiver가 동일한 이벤트를 수신하면, 그 처리 로직이 복잡해질 가능성이 있습니다.
 
 

BroadcastReceiver 사용 방법

  • 정적 등록 (Static Registration)
정적으로 BroadcastReceiver를 등록하는 경우에는 AndroidManifest.xml 파일에 receiver 태그를 사용하여 등록합니다. 이 방법은 앱이 설치되는 순간에 시스템에 의해 자동으로 등록되며, 앱이 실행되지 않은 상태에서도 브로드캐스트를 받을 수 있습니다.
class MyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { when(intent.action) { "MY_ACTION" -> { // Do something Log.d("MyReceiver", "Received MY_ACTION") } else -> { // Do nothing } } } } // Manifest <receiver android:name=".MyReceiver"> <intent-filter> <action android:name="MY_ACTION"/> </intent-filter> </receiver>
 
  • 동적 등록 (Dynamic Registration)
동적으로 BroadcastReceiver를 등록하는 경우에는 앱의 코드 내에서 registerReceiver() 메서드를 사용하여 등록합니다. 이 방법은 앱이 실행되고 있는 동안에만 브로드캐스트를 수신할 수 있습니다.
class MainActivity : AppCompatActivity() { private val myDynamicReceiver = MyDynamicReceiver() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 동적으로 BroadcastReceiver 등록 val intentFilter = IntentFilter("MY_ACTION") registerReceiver(myDynamicReceiver, intentFilter) } override fun onDestroy() { // 등록 해제 unregisterReceiver(myDynamicReceiver) super.onDestroy() } } class MyDynamicReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if ("MY_ACTION" == intent.action) { // Do something } } }
 
위 코드를 나누어서 설명해보겠습니다.
아래 코드는 BroadcastReceiver의 인스턴스를 생성하는 코드입니다.
private val myDynamicReceiver = MyDynamicReceiver()
아래 코드는 BroadcastReceiver 수신을 등록하는 코드입니다. 이 때, MY_ACTION에는 위에 있는 Intent 중 하나를 적으시면 됩니다.
val intentFilter = IntentFilter("MY_ACTION") registerReceiver(myDynamicReceiver, intentFilter)
이 코드는 BroadcastReceiver 수신을 해제하는 코드입니다.
unregisterReceiver(myDynamicReceiver)
 
단, BroadcastReceiver를 사용시 적절한 시점에 register와 unregister 하지 않는다면 크래시가 발생합니다. onCreate() 에 register하였다면 onDestroy에 unregister를 해야하며, onResume() 에 register하였다면 onStop에 unregister를 해야합니다.
 
 
 

내일배움캠프는 개발에 필요한 핵심만 배웁니다

지금까지 꼭 필요한 안드로이드 지식에 대해 알아보았습니다. 내일배움캠프에서는 전문가들이 선별한 핵심 안드로이드 개발 지식으로 개발 공부도, 취업도 보다 효율적으로 할 수 있는데요. 국내 유수의 IT기업 출신 튜터님들과 실습 위주의 독보적인 커리큘럼으로 개발자 취업을 체계적으로 준비해보세요. 내일배움캠프 4개월, 여러분 인생의 가장 큰 터닝 포인트입니다.
 
 
 
출처
 
 
CREDIT
글 | 김기원 내일배움캠프 수료생 편집 | 정효재 팀스파르타 에디터
 
 

취업 준비, 어디서부터 시작해야 할지 모르겠다면?

 
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
 
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
 
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
 
Share article
Subscribe to our newsletter
RSSPowered by inblog