백그라운드 위치 제한

Android 8.0(API 레벨 26)은 소비전력 절감을 위해 백그라운드 앱이 사용자의 현재 위치를 검색할 수 있는 빈도를 제한합니다. 앱은 시간당 몇 번만 위치 업데이트를 받을 수 있습니다.

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

이런 위치 검색 동작은 앱이 백그라운드에서 실행 중인 상태에서 실시간 경고나 모션 감지에 의존하는 경우 특히 유념해야 합니다.

시스템은 포그라운드 앱과 백그라운드 앱을 구분합니다. 다음 조건 중 하나라도 참일 경우 앱이 포그라운드에 있는 것으로 간주됩니다.

  • 액티비티가 시작되든 일시 중지되든 상관없이, 보이는 액티비티가 있는 경우
  • 포그라운드 서비스가 있는 경우
  • 앱의 서비스 중 하나에 바인딩되거나 앱의 콘텐츠 제공자 중 하나를 사용하여 앱에 또 다른 포그라운드 앱이 연결된 경우. 예를 들어 포그라운드 앱이 다른 앱 내의 다음 구성요소 중 하나에 바인딩되면, 그 다른 앱이 포그라운드에 있는 것으로 간주됩니다.

위의 어떤 조건에도 해당하지 않는 경우 앱이 백그라운드에 있는 것으로 간주됩니다.

포그라운드 앱 동작 유지

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

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

앱의 위치 동작 조정

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

  • 앱을 포그라운드로 가져옵니다.
  • startForegroundService()를 호출하여 앱에서 포그라운드 서비스를 시작합니다. 해당 포그라운드 서비스가 활성 상태이면 알림 영역에 진행 중인 알림으로 나타납니다.
  • GeofencingClient와 같이, 전력 사용량 최소화를 위해 최적화된 Geofencing API 요소를 사용합니다.
  • 빠른 속도로 위치를 요청하는 포그라운드 앱이 있는 경우 더 빠른 위치 업데이트를 받을 수 있는 수동적 위치 리스너를 사용합니다.

참고: 앱이 주기가 짧은 업데이트를 포함하는 위치 방문 기록에 액세스할 필요가 있는 경우 FusedLocationProviderApi 인터페이스 같은 Fused Location Provider API 요소의 일괄 처리 버전을 사용하세요. 앱이 백그라운드에서 실행 중일 때 이 API는 비 일괄 처리 API보다 더 자주 사용자 위치 정보를 수신합니다. 하지만 앱은 여전히 시간당 몇 번만 일괄적으로 업데이트를 수신한다는 점에 유념해야 합니다.

관련 API

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

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

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

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

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

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