본문 바로가기
개발/Android

BroadcastReceiver에서 Background thread를 사용 시 주의 사항

by Dev Aaron 2020. 11. 8.
반응형

BroadcastReceiver의 onReceive() 메서드에서 뭔가 시간이 오래 걸릴 작업을 해야할 일이 생겼다.

정확히는 BroadcastReceiver의 onReceive() 메서드에서 특정 이벤트를 받게 되면, ContentResolver를 통해 디바이스 내 다른 앱에 구축된 Database에 데이터를 insert해주어야 하는 상황이다.

AsyncTask를 통해 DB에 insert하면 될 것 같지만 한가지 주의 사항이 있다.
아래 링크에서 그 내용을 자세히 설명하고 있는데,

https://developer.android.com/guide/components/broadcasts#effects-process-state

간단히 얘기하면, onReceive() 메서드가 return 되면 BroadcastReceiver는 더이상 active 상태가 아니기 때문에 해당 process의 priority가 낮아질 수 있고, 이런 이유로 시스템에서 해당 프로세스를 종료시킬 수 있게 된다.

즉, 이러한 이유로 onReceive()에서 돌린 Background Thread가 예기치 않은 이유로 종료될 수 있다.

이 문제를 해결하기 위한 방법으로 BroadcastReceiver는 goAsync() 메서드를 제공하고 있다.
자세한 사용법은 상기 링크 내에 code snippet을 확인하면 된다.

반응형