Korzystanie z lokalizacji w tle może znacznie wpływać na czas pracy baterii. Android umożliwia ograniczanie gromadzenia danych o lokalizacji w tle, co zmusza programistów do optymalizowania aplikacji pod kątem oszczędzania baterii. Te optymalizacje przynoszą korzyści wszystkim urządzeniom, niezależnie od wersji Androida, na której działają.
Z ograniczeniami dostępu do lokalizacji w tle:
- Zbieranie lokalizacji w tle jest ograniczone, a lokalizacja jest obliczana i przesyłana tylko kilka razy na godzinę.
- Skanowanie sieci Wi-Fi jest bardziej konserwatywne, a aktualizacje lokalizacji nie są obliczane, gdy urządzenie pozostaje połączone z tym samym statycznym punktem dostępu.
- Czas reakcji na geoogrodzenia zmienia się z kilkudziesięciu sekund na około 2 minuty. Ta zmiana poprawia wydajność baterii nawet 10 razy na niektórych urządzeniach.
Wymagana wiedza
Ten dokument zakłada znajomość tych interfejsów API:
- Usługi lokalizacyjne Google. Te interfejsy API zapewniają większą dokładność i mniejsze obciążenie baterii niż interfejsy API frameworka lokalizacji.
- Dostawca uśrednionej lokalizacji. Ten interfejs API łączy sygnały z GPS, Wi-Fi i sieci komórkowych, a także z akcelerometru, żyroskopu, magnetometru i innych czujników.
- Geofencing – ten interfejs API jest oparty na interfejsie Fused Location Provider API i jest zoptymalizowany pod kątem wydajności baterii.
Informacje o szybkim zużyciu baterii
Pobieranie danych o lokalizacji a zużycie baterii:
- Dokładność: dokładność danych o lokalizacji. Zasadniczo im większa dokładność, tym większy pobór prądu.
- Częstotliwość: jak często jest obliczana lokalizacja. Im częściej obliczana jest lokalizacja, tym więcej energii zużywa bateria.
- Opóźnienie:szybkość dostarczania danych o lokalizacji. Mniejsza latencja zwykle wymaga większego zużycia baterii.
Dokładność
Dokładność lokalizacji możesz określić za pomocą metody setPriority()
, przekazując jako argument jedną z tych wartości:
PRIORITY_HIGH_ACCURACY
zapewnia najdokładniejszą możliwą lokalizację, która jest obliczana na podstawie jak największej liczby danych wejściowych (włącza GPS, Wi-Fi i komórkową oraz używa różnych czujników) i może powodować znaczne zużycie baterii.PRIORITY_BALANCED_POWER_ACCURACY
zapewnia dokładną lokalizację przy optymalizacji zużycia energii. bardzo rzadko korzysta z GPS; Zwykle do obliczenia lokalizacji urządzenia używa kombinacji informacji o sieci Wi-Fi i komórkowej.PRIORITY_LOW_POWER
korzysta głównie ze stacji bazowych i nie używa danych z GPS ani Wi-Fi, zapewniając przy tym dokładność na poziomie miasta przy minimalnym zużyciu baterii.PRIORITY_NO_POWER
otrzymuje pasywnie lokalizację z innych aplikacji, dla których lokalizacja została już obliczona.
Aby zaspokoić potrzeby większości aplikacji w zakresie lokalizacji, używaj opcji zrównoważonego lub niskiego zużycia energii. Zarezerwuj wysoką dokładność dla aplikacji, które działają na pierwszym planie i wymagają aktualizacji lokalizacji w czasie rzeczywistym (np. aplikacji do map).
Częstotliwość
Częstotliwość wyświetlania reklam w danym miejscu możesz określić na 2 sposoby:
- Użyj metody
setinterval()
, aby określić przedział czasu na obliczanie lokalizacji aplikacji. - Aby określić interwał otrzymywania lokalizacji z innych aplikacji, użyj metody
setFastestInterval()
.
Przekazywanie największej możliwej wartości podczas używania parametru setInterval()
. Jest to szczególnie ważne w przypadku zbierania danych o lokalizacji w tle, które często powoduje zużycie baterii. Zarezerwuj przedziały czasowe o długości kilku sekund na potrzeby zastosowań na pierwszym planie.
Limity lokalizacji w tle wprowadzone w Androidzie 8.0 (poziom interfejsu API 26) wymuszają stosowanie tych strategii, ale Twoja aplikacja powinna dążyć do ich stosowania na urządzeniach z Androidem 7.0 (poziom interfejsu API 24) i starszych.
Opóźnienie
Możesz określić opóźnienie za pomocą metody setMaxWaitTime()
, zazwyczaj podając wartość kilkakrotnie większą niż interwał określony w metodzie setInterval()
. To ustawienie opóźnia przesyłanie lokalizacji, a wiele aktualizacji lokalizacji może być dostarczanych w partiach. Te 2 zmiany pomagają zminimalizować zużycie baterii.
Jeśli Twoja aplikacja nie wymaga natychmiastowej aktualizacji lokalizacji, podaj do metody setMaxWaitTime()
możliwie największą wartość, rezygnując w ten sposób z opóźnienia na rzecz większej ilości danych i efektywniejszego wykorzystania baterii.
Korzystając z geofence’ów, aplikacje powinny przekazywać dużą wartość do metody setNotificationResponsiveness()
, aby oszczędzać energię. Zalecana wartość to co najmniej 5 minut.
Więcej materiałów
Więcej informacji znajdziesz w tych dokumentach:
- Rekomendacje: w tym przewodniku znajdziesz konkretne zalecane działania, które możesz podjąć, aby zmniejszyć wpływ aplikacji na czas pracy na baterii.
- Przykłady użycia: w tym przewodniku znajdziesz kilka typowych przypadków użycia, w których możesz korzystać z usług lokalizacyjnych, oraz dowiesz się, jak zoptymalizować wpływ na czas pracy na baterii w tych przypadkach.