2. BroadcastReceiver(BR) 란?
• 시스템에서 발생되는 Event를 받아들여서
처리를 하는 통로.
• Broadcast: 시스템이 Event를 발송
Receiver: 이러한 Event를 받아서 처리.
• 예를 들어서,
문자가 도착을 한 경우
배터리가 떨어지는 경우
4. BroadcastReceiver 구현 주의사항
• BR은 프로세스의 메인 쓰레드에서 실행
• 이는 10초 이내에 return을 해야 합니다.
– onReceive 메소드가 10초 내에 응답하지 않는 경우, 시스템은 App이 응답이 없
는 것으로 판단. ANR 발생에 의해서 사용자가 App을 강제로 죽일 수 있습니다.
– 즉 짧은 시간 내에 조처 후 return 하도록 구현
• Thread를 생성하여 비동기로 구현할까요?
– 이 방법은 의미가 없습니다.
– onReceiver가 return하면, Thread 완료와 관계 없이 BR 생명 주기가 마쳐지기 때문입
니다.
– 진짜??? 책에 쓰여있는데, 이게 맞는 이야기?
7. BR 내 Thread 테스트 결과
BroadCast 3회 호출
각기 다른 Thread 3개 동작
개별 Thread 정상 종료.
물론 ANR 없이!!
8. BR 구현 가이드
• 10초 이내에 (정확한 시간 보다는 바로 처리하게 구현한
다고 이해) 입력에 대한 처리를 마치도록 합니다. 그렇지
않으면 ANR이 발생됩니다.
• 이를 위해서 Thread를 사용하는 방법을 사용하는 것을
고려해보는 것도 좋습니다. 그렇지만, Thread 관리는 여
전히 어렵죠.
• onReceive에서 기본 처리 후, 시간이 소요될 작업이나 추
가적인 화면 연동을 위해서는 해당 함수 안에서 service
나 activity를 직접 start 시키도록 하자.
9. 일시적 등록 관리
• Manifest 파일에 등록 않는 방법
• 일시적으로 Receive를 하고 싶을 때, 소스 코드를 통해서 설정이 가능합니다.
• 예를 들어서, 특정 UI 구성 요소를 특정 상태에 따라서 동적으로 노출을 하는 경우를
생각할 수 있습니다.
Context
Activity / Service
10. App 안에서 BR을 활용.
• Event 기반으로 신호를 단지 시스템에서만 받는 것이 아닙니다.
• 프로그램 적으로도 BR에 신호를 보낼 수 있으며, 이는 App 간/App
내 통신 수단으로 활용될 수 있습니다.
11. 활용 가능성…
• 배터리/전원 상태 .. ACTION_BATTERY_CHANGED,
ACTION_BATTER_LOW ..
• SD 카드 상태 ..
ACTION_MEDIA_MOUNTED, ACTION_MEDIA_REMOVED ..
• SMS 수신 .. SMS_RECEIVED
• 여러 이벤트들이 있는데, 이들을 활용하는 것은 그 때 그 때
찾아봅시다. 그리고 주의할 점은 대부분 RECEIVE 받고자 하는
Event들에 대해서는 Permission이 필요합니다. 이 부분도 확
인하도록 합니다.
12. 추가로 abort
Priority를 높여서, 먼저 broadcast를
수신한 뒤에 abortBroadcast 통해서
더 이상 broadcast가 전파되는 것을
막을 수 있습니다.