[안드로이드] BroadcaseReceiver가 잘 동작하지 않는 이유(분석중)

프로그래밍/안드로이드2020. 11. 12. 12:23

안드로이드에서 Broadcast는 서로 다른 프로세스 간에서 데이터를 통신하는 가장 쉬운 방법이 아닌가 싶습니다. 특히 안드로이드 시스템에서 발생하는 특별한 이벤트를 pub sub 패턴?과 유사하게 받아 처리할 수 있습니다.

 

developer.android.com/guide/components/broadcasts

브로드캐스트 리시버에 대한 자세한 설명은 위의 공식 디벨로퍼 가이드에 잘 정리되어 있습니다.

 

문제는 안드로이드가 진화함에 따라 브로드캐스트 리시버에 제약을 두기 시작해서 생각대로 잘 동작하지 않는 경우가 있다는 것입니다. 

 

developer.android.com/about/versions/oreo/background#:~:text=Whenever%20an%20app%20runs%20in,device's%20limited%20resources%2C%20like%20RAM.&text=To%20improve%20the%20user%20experience,while%20running%20in%20the%20background.

 

백그라운드 실행 제한  |  Android 개발자  |  Android Developers

Android 8.0 이상을 대상으로 하는 앱에 대한 새로운 백그라운드 제한.

developer.android.com

그 제약 대상은 사용자가 잘 알아차릴 수 없는 백그라운드 서비스와 BroadcastReceiver 입니다. 이를 Background Limitation이라 합니다.

 

BroadcastReceiver를 사용하는 방법 중 하나는 AndroidManifest에 특정 리시버를 명시하는 것이었습니다. 그런데 안드로이드 8.0부터는 이를 지원하지 않는다고 하네요(수신자가 특정되지 않는 implicit broadcast만). 대부분의 경우 scheduled jobs로 대체 가능하다고 합니다.

(만약 AndroidManifest에서 정적으로 BroadcastReceiver를 등록하는 게 아닌.. 동적으로 Code에서 BroadcastReceiver를 등록하면.. 앱이 실행중일 때만 브로드캐스트 리시버가 동작하는 것 같습니다)

 

Note: If your app targets API level 26 or higher, you cannot use the manifest to declare a receiver for implicit broadcasts (broadcasts that do not target your app specifically), except for a few implicit broadcasts that are exempted from that restriction. In most cases, you can use scheduled jobs instead.

 

그런데 제가 테스트했을 때는 AndroidManifest에 Broadcast를 정적으로 등록해도 제 앱을 종료해도 하루 정도는 브로드캐스트 리시버가 잘 동작하니 뭔가 좀 이상하더라구요.

 

또 정보를 좀 찾아보니 일부? 대표적인? Broadcast들은 예외 처리가 되어.. implicit broadcast임에도 여전히.. AndroidManifest에서 사용이 가능합니다.

 

developer.android.com/guide/components/broadcast-exceptions

 

제가 사용하고 있는 Broadcast는 SMS_RECEIVED_ACTION인데 이것도 예외처리되어 사용이 가능합니다.

 

그렇다면 왜.. 하루정도 지나면 잘 동작하던 BroadcastReceiver가 동작하지 않는 것일까요?

 

 

 

참고

developer.android.com/guide/background

 

백그라운드 처리 가이드  |  Android 개발자  |  Android Developers

백그라운드 데이터 처리는 사용자의 기대에 부응하고 사용자에게 도움이 되는 Android 애플리케이션을 개발하는 데 있어 중요한 부분입니다. 이 가이드에서는 백그라운드 작업 카테고리를 정의

developer.android.com

 

developer.android.com/topic/performance/power/power-details

 

전력 관리 제한사항  |  Android 개발자  |  Android Developers

시스템에서 부과하는 전력 제한사항을 알아보세요.

developer.android.com

 

developer.android.com/topic/performance/power/test-power

 

전력 관련 문제 테스트  |  Android 개발자  |  Android Developers

전력 관련 문제 테스트 및 해결

developer.android.com

stackoverflow.com/questions/62569490/sms-receiver-stops-working-after-sometime

 

SMS receiver stops working after sometime

I have a requirement of reading incoming SMS from a few of the e-commerce apps. For that, I added BroadcastReceiver for receiving SMS and reading that. Also added runtime permission of READ_SMS for...

stackoverflow.com

 

작성자

Posted by 드리머즈

관련 글

댓글 영역