위치 서비스를 사용할 때 앱이 기기의 배터리 수명에 미치는 영향을 개선하려면 다음 작업을 실행하세요.
위치 업데이트 삭제
불필요한 배터리 소모가 발생하는 일반적인 원인은 필요하지 않은 시점에 위치 업데이트를 삭제하지 못하는 데 있습니다.
활동의 onStart()
또는 onResume()
수명 주기 메서드에 requestlocationUpdates()
호출이 포함되어 있지만, onPause()
또는 onStop()
수명 주기 메서드에 그에 상응하는 removeLocationUpdates()
호출이 포함되어 있지 않을 때 불필요한 배터리 소모가 발생할 수 있습니다.
수명 주기 인식 구성요소를 사용하여 앱 활동의 수명 주기를 더 효율적으로 관리할 수 있습니다. 자세한 내용은 수명 주기 인식 구성요소로 수명 주기 처리를 참고하세요.
시간 초과 설정
배터리 소모로부터 기기를 보호하려면 위치 업데이트를 중단해야 할 시점에 적절한 시간 초과를 설정합니다. 이렇게 시간 초과를 설정하면 업데이트가 무한히 계속되지 않도록 하고, (가령 코드의 버그로 인해) 업데이트를 요청했지만 삭제되지 않은 시나리오에서 앱을 보호합니다.
통합 위치 정보 제공자 요청의 경우 setExpirationDuration()
을 호출해서 시간 초과를 추가하여 이 메서드를 마지막으로 호출한 시점 이후부터의 시간을 밀리초 단위로 나타내는 매개변수를 수신합니다. setExpirationTime()
을 호출해도 시간 초과를 추가할 수 있습니다. 이는 시스템이 마지막으로 부팅된 시점 이후부터의 만료 시간을 밀리초 단위로 나타내는 매개변수를 수신합니다.
지오펜스 위치 요청에 시간 초과를 추가하려면 setExpirationDuration()
메서드를 호출합니다.
일괄 요청
포그라운드에서 실행되지 않는 모든 사용 사례는 여러 요청을 한 번에 일괄 처리합니다. setInterval()
메서드를 사용하여 위치를 계산하려는 간격을 지정합니다. 그런 다음 setMaxWaitTime()
메서드를 사용하여 앱에 위치가 전달되는 간격을 설정합니다. setInterval()
메서드에 전달된 값의 배수인 값을 setMaxWaitTime()
메서드에 전달합니다. 예를 들어 다음과 같은 위치 요청을 고려하세요.
Kotlin
val request = LocationRequest()
request.setInterval(10 * 60 * 1000)
request.setMaxWaitTime(60 * 60 * 1000)
자바
LocationRequest request = new LocationRequest();
request.setInterval(10 * 60 * 1000);
request.setMaxWaitTime(60 * 60 * 1000);
이 경우 시스템은 약 10분마다 위치를 계산하고 약 1시간마다 약 6개의 위치 데이터 포인트를 일괄 전송합니다. 약 10분마다 위치 업데이트를 받지만 기기는 1시간 정도에 한 번씩만 활성화되므로 배터리를 아낄 수 있습니다.
수동적 위치 업데이트 사용
백그라운드 사용 사례에서는 위치 업데이트를 제한하는 것이 좋습니다. Android 8.0 (API 수준 26) 제한사항은 이러한 관행을 적용하지만, 이전 기기에서 실행되는 앱은 최대한 백그라운드 위치 업데이트를 제한하려고 노력해야 합니다.
앱이 백그라운드에 있을 때는 다른 앱이 포그라운드에서 위치 업데이트를 수시로 요청할 가능성이 있습니다. 위치 서비스를 사용하면 앱에서 이러한 업데이트를 사용할 수 있습니다. 편의적으로 위치 데이터를 사용하는 다음과 같은 위치 요청을 고려해보세요.
Kotlin
val request = LocationRequest()
request.setInterval(15 * 60 * 1000)
request.setFastestInterval(2 * 60 * 1000)
자바
LocationRequest request = new LocationRequest();
request.setInterval(15 * 60 * 1000);
request.setFastestInterval(2 * 60 * 1000);
이전 예에서 앱의 위치는 약 15분마다 계산됩니다. 다른 앱이 위치를 요청하면 앱은 최대 2분 간격으로 데이터를 수신합니다.
수동적으로 위치 정보를 사용하는 데는 배터리가 소모되지 않지만 위치 데이터를 수신할 때 리소스가 많이 소모되는 CPU 또는 I/O 작업이 트리거되는 경우에는 주의해야 합니다. 배터리 비용을 최소화하려면 setFastestInterval()
에 지정된 간격이 너무 작아서는 안 됩니다.