반응형
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을 확인하면 된다.
반응형
'개발 > Android' 카테고리의 다른 글
현재 위치 정보 얻기 – FusedLocationProvider (0) | 2020.11.08 |
---|---|
Android Jetpack Navigation 사용하여 parameter 전달하기 (0) | 2020.11.08 |
[Android] 앱 출시 전 체크 사항 14가지 (번역) (0) | 2020.11.08 |
[Android] Firebase FCM을 사용하여 서버 없이 push 알림 구현하기 – part 2 (0) | 2020.11.08 |
[Android] Firebase FCM을 사용하여 서버 없이 push 알림 구현하기 – part 1 (0) | 2020.11.08 |