백그라운드 위치 제한

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 인터페이스와 같은 Fused Location Provider API 요소의 일괄 처리 버전을 사용하세요. 앱이 백그라운드에서 실행 중일 때 이 API는 비 일괄 처리 API보다 더 자주 사용자 위치 정보를 수신합니다. 하지만 앱은 여전히 시간당 몇 번만 일괄적으로 업데이트를 수신한다는 점에 유의해야 합니다.

관련 API

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

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

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

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

    참고: Google Play 서비스가 설치된 기기에서 앱을 실행하는 경우 Fused Location Provider (FLP)를 대신 사용하는 것이 좋습니다.

Wi-Fi Manager
startScan() 메서드는 시간당 몇 번만 백그라운드 앱을 전체적으로 검색합니다. 뒤이어 곧 백그라운드 앱이 이 메서드를 다시 호출하면 WifiManager 클래스에서 이전 검색의 캐시된 결과를 제공합니다.