Android Oreo(8.0) - Background Location Limit

WindSekirun (wind.seo)·2022년 4월 26일
0
post-custom-banner

이 글은 기존 운영했던 WordPress 블로그인 PyxisPub: Development Life (pyxispub.uzuki.live) 에서 가져온 글 입니다. 모든 글을 가져오지는 않으며, 작성 시점과 현재 시점에는 차이가 많이 존재합니다.

작성 시점: 2017-07-10

Android O 부터 앱의 대상 SDK 버전 상관 없이 후면 서비스에서 위치를 받는 것이 제한을 받게 되었다.

여기서 애매한 것이 전경(포그라운드, Foreground)과 후면(백그라운드, Background)의 구분 방법이다. 안드로이드 개발자 사이트 의 해당 항목을 보면, 아래 조건을 하나라도 만족시킬 경우에는 전경 서비스로 분류된다.

나머지는 전부 후면 서비스로 분리된다.

전경 서비스는 7.1.1 (API Level 25) 이하와 같이 작동한다. (물론, 실시간 위치 업데이트는 배터리 소모를 강력하게 야기시킨다.) 하지만 후면 서비스가 문제다.

제한을 받지 않는 방법?

제한을 받지 않으려면, 아래와 같은 방법을 하라고 추천하고 있다.

  • 앱을 전경으로 가져온다
  • 전경 서비스를 사용한다. 서비스가 살아있을 때는 반드시 OnGoing Notification 을 표시 해야 한다.
  • 전력 사용 최적화된 GeofencingApi 사용
  • 수동 브로드캐스트로 위치를 가져온다. (PendingIntent 사용)

영향을 받는 API

Fused Location Provider (FLP)

  • 전경 상태에 있을 경우엔 문제가 없음
  • 후면 상태일 경우, 시간당 몇번만 받을 수 있음

GeofencingApi

  • 후면 상태의 앱이라고 하더라도 Fused Location Provider 보다 더 많은 위치 업데이트를 받을 수 있다.
  • Geofencing 이벤트의 응답성은 대략 몇 분 정도.

GNSS Measurements and GNSS Navigation Messages

LocationManager

  • 후면 상태일 경우, 시간당 몇번만 받을 수 있음
  • 사용자의 기기에 Google Play Services가 설치되었다고 보장이 가능할 때, FLP의 사용을 강력히 추천함

Wifi-Manager

  • startScan 메소드는 시간당 몇 번만 후면 앱에 대해 전체 스캔을 수행함. 백그라운드 앱이 다시 호출하면 알아서 캐시된 결과를 가져옴.

결론

어쨌거나 저쨌거나, startForeground(int, Notification) 을 호출하는 것이 제일 간편한 방법이 되었다. 문제는, 고객사를 어떻게 설득해야 할지...

profile
Android Developer @kakaobank
post-custom-banner

0개의 댓글