백그라운드 위치 제한

Android 8.0 (API 수준 26)에서는 전력 소모를 줄이기 위해 앱이 백그라운드에서 실행되는 동안 앱이 사용자의 현재 위치를 검색할 수 있는 빈도를 제한합니다. 이러한 조건에서 앱은 시간당 몇 번만 위치 업데이트를 받을 수 있습니다.

참고: 이러한 제한사항은 앱의 타겟 SDK 버전과 관계없이 Android 8.0 (API 수준 26) 이상을 실행하는 기기에서 사용되는 모든 앱에 적용됩니다.

이러한 위치 검색 동작은 앱이 백그라운드에서 실행되는 동안 실시간 알림이나 움직임 감지에 의존하는 경우 특히 유의해야 합니다.

포그라운드 앱 동작 유지

앱이 Android 8.0 (API 수준 26)을 실행하는 기기에서 포그라운드에 있는 경우 위치 업데이트 동작은 Android 7.1.1 (API 수준 25) 이하에서와 동일합니다.

경고: 앱이 장기간에 걸쳐 거의 실시간 위치 업데이트를 검색하면 기기의 배터리 수명이 상당히 짧아집니다.

앱의 위치 동작 조정

앱이 빈번하지 않은 위치 업데이트를 수신하는 경우 백그라운드에서 실행되는 앱의 사용 사례가 전혀 성공할 수 없는지 고려합니다. 이 경우 다음 작업 중 하나를 실행하여 위치 업데이트를 더 자주 검색할 수 있습니다.

  • 앱을 포그라운드로 가져옵니다.
  • startForegroundService()를 호출하여 앱에서 포그라운드 서비스를 시작합니다. 이러한 포그라운드 서비스가 활성 상태이면 알림 영역에 진행 중인 알림으로 표시됩니다.

    주의: 앱이 Android 11 (API 수준 30) 이상을 실행하는 기기에서 백그라운드에서 실행되는 동안 포그라운드 서비스를 시작하는 경우 사용자가 ACCESS_BACKGROUND_LOCATION 권한을 앱에 부여하지 않은 한 앱에서 위치 정보에 액세스할 수 없습니다. 자세한 내용은 포그라운드 서비스와 관련된 사용 중 제한사항에 관한 안내를 참고하세요.

  • GeofencingClient와 같이 전력 사용량 최소화에 최적화된 Geofencing API 요소를 사용합니다.
  • 더 빠른 속도로 위치 업데이트를 요청하는 포그라운드 앱이 있는 경우 더 빠른 위치 업데이트를 받을 수 있는 수동적 위치 리스너를 사용합니다.

참고: 앱이 시간이 빈번한 업데이트를 포함하는 위치 기록에 액세스해야 한다면 FusedLocationProviderApi 인터페이스와 같은 통합 위치 정보 제공자 API 요소의 일괄 처리 버전을 사용하세요. 앱이 백그라운드에서 실행 중일 때 이 API는 일괄 처리되지 않은 API보다 더 자주 사용자 위치를 수신합니다. 그러나 앱은 여전히 매시간 몇 번만 일괄적으로 업데이트를 수신한다는 점에 유의하세요.

관련 API

백그라운드 앱에서 위치 검색 동작 변경사항은 다음 API에 영향을 미칩니다.

통합 위치 정보 제공자 (FLP)
  • 앱이 백그라운드에서 실행 중인 경우 위치 시스템 서비스는 매시간 몇 번만 앱의 새 위치를 계산합니다. 앱이 위치 업데이트를 더 자주 요청하는 경우에도 마찬가지입니다.

    그러나 FLP의 일괄 처리된 버전을 사용하면 앱이 일괄 업데이트를 받은 후 더 자주 위치 기록에 액세스할 수 있습니다. 일괄 업데이트는 시간당 몇 번만 발생합니다.

  • 앱이 포그라운드에서 실행 중인 경우 Android 7.1.1 (API 수준 25)과 비교하여 위치 샘플링 레이트는 변경되지 않습니다.
지오펜싱
  • 백그라운드 앱은 통합 위치 정보 제공자의 업데이트보다 지오펜싱 전환 이벤트를 더 자주 수신할 수 있습니다.
  • 지오펜싱 이벤트의 평균 응답성은 대략 몇 분 정도입니다.
GNSS Measurements 및 GNSS Navigation Messages
Location Manager
  • 위치 업데이트는 시간당 몇 번만 백그라운드 앱에 제공됩니다.

    참고: Google Play 서비스가 설치된 기기에서 앱이 실행 중인 경우 통합 위치 정보 제공자 (FLP)를 대신 사용하는 것이 좋습니다.

Wi-Fi Manager
startScan() 메서드는 시간당 몇 번만 백그라운드 앱을 전체 스캔합니다. 백그라운드 앱이 잠시 후 이 메서드를 다시 호출하면 WifiManager 클래스는 이전 스캔에서 캐시된 결과를 제공합니다.