Simple&Natural
Android의 Background Service 제한에 따른 이슈 본문
본 포스팅은 2019. 1. 9. 15:04 네이버 블로그에 작성했던 글을 이전한 것임
안드로이드 스튜디오 에뮬레이터로 service를 테스트하던 중 start_sticky 관련한 문제가 있었다.
MainActivity에서 startService를 실행한 후에 onStartCommand의 return값에 start_sticky를 설정한 상태라면
앱을 종료하고 난 뒤 onCreate -> onStartCommand가 불려야 정상이다.
그러나 로그를 찍어보니 onCreate->onDestroy가 불리는 문제가 있었다.
실제 기기에서는 모두 정상적으로 작동하는 것으로 보아 코드상의 문제는 아닌 듯 싶었다. (에뮬레이터 두 대로 재차 확인)
구글링과 스택오버플로우를 아무리 동원해도 관련 정보가 나오지 않아 혼자서 머리 싸매고 고민하던 중...
실제 기기와 에뮬레이터가 다른 점이라고는 버전 뿐이었다.
혹시나 하여 emulator의 버전을 실제 작동했던 기기의 버전으로 맞추고 실행해보니 문제가 해결됨.
오류 발생 디바이스 버전 8.1.0 API27
정상 작동 디바이스 버전 8.0.0 API26
안드로이드 스튜디오 버전 3.1.3
API28 에서도 안되는 것을 확인하였다.
API26이 넘어가면 안되는 것으로 추측하고 있던 도중 원인을 알게 되었다.
역시 버전 이슈가 맞았다.
안드로이드 공식 홈페이지에서 관련 이슈를 찾을 수 있었다.
API26 부터 Background 작업을 제한하는 내용의 공식문서이다.
https://developer.android.com/about/versions/oreo/background#services
문서에 보면 Target API 를 25 이하로 낮출 경우 이러한 제한을 피할 수 있다고 되어 있다.
내용대로 API를 25로 낮추고 다시 실행해보니 onCreate 뒤에 onStartCommand가 정상적으로 불린다.
++
글을 작성할 당시에도 백그라운드 서비스를 지양하는 추세였는데
2020년 현재에는 안드로이드 공식적으로 유휴 상태 앱에서의 백그라운드 서비스 사용을 거의 막아놓고 있습니다.
앱이 꺼져도 죽지않는 Immutable한 서비스를 구현하고 싶으신 분들은 반드시 Foreground Service를 사용하셔야 합니다.
'안드로이드(Android) > 이슈 및 해결' 카테고리의 다른 글
안드로이드 Legacy Code 로 인해 빌드가 되지 않는 경우 (0) | 2020.03.05 |
---|---|
안드로이드 프로젝트 빌드 시 Unfortunately you can't have non-Gradle Java modules and > Android-Gradle modules in one project 오류가 발생하는 경우 (0) | 2020.02.22 |
안드로이드 회원탈퇴 화면스택 관련 (0) | 2019.12.13 |
안드로이드 뷰 사이즈 자바 코드에서 동적으로 변경하기 (0) | 2019.12.13 |
Android Module 추가 방법 (0) | 2019.12.13 |