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에 영향을 미칩니다.
- 통합 위치 정보 제공자 (FLP)
-
-
앱이 백그라운드에서 실행 중인 경우 위치 시스템 서비스는 매시간 몇 번만 앱의 새 위치를 계산합니다. 앱에서 위치 업데이트를 더 자주 요청하는 경우에도 마찬가지입니다.
그러나 FLP의 일괄 처리된 버전을 사용하면 앱이 일괄 업데이트를 받은 후 위치 기록에 더 자주 액세스할 수 있습니다. 일괄 업데이트는 시간당 몇 번만 발생합니다.
- 앱이 포그라운드에서 실행 중인 경우 Android 7.1.1 (API 수준 25)에 비해 위치 샘플링 레이트에 변화가 없습니다.
-
- 지오펜싱
-
- 백그라운드 앱은 통합 위치 정보 제공자의 업데이트보다 지오펜싱 전환 이벤트를 더 자주 수신할 수 있습니다.
- 지오펜싱 이벤트의 평균 응답성은 대략 몇 분 정도입니다.
- GNSS Measurements 및 GNSS Navigation Messages
-
- 앱이 백그라운드에 있을 때
GnssMeasurement
및GnssNavigationMessage
의 출력을 수신하도록 등록된 콜백은 실행을 중지합니다.
- 앱이 백그라운드에 있을 때
- Location Manager
-
-
위치 업데이트는 시간당 몇 번만 백그라운드 앱에 제공됩니다.
참고: 앱이 Google Play 서비스가 설치된 기기에서 실행 중인 경우 통합 위치 정보 제공자 (FLP)를 대신 사용하는 것이 좋습니다.
-
- Wi-Fi Manager
startScan()
메서드는 시간당 몇 번만 백그라운드 앱을 전체 검색합니다. 곧바로 백그라운드 앱이 이 메서드를 다시 호출하면WifiManager
클래스는 이전 스캔의 캐시된 결과를 제공합니다.