W tym dokumencie opisujemy sprawdzone metody optymalizacji zużycia energii w aplikacji do nawigacji mobilnej utworzonej za pomocą pakietu Navigation SDK. Opisuje też kompromisy, które należy wziąć pod uwagę przy stosowaniu tych praktyk. W szczególności ten dokument zawiera te informacje:
- Źródła wysokiego zużycia energii, od najwyższego do najniższego.
- Strategie optymalizacji zużycia energii w kolejności od najważniejszej, zaczynając od liczby klatek.
- Strategie dla użytkowników, które pomogą im dowiedzieć się, jak zarządzać korzystaniem z urządzenia podczas nawigacji.
Dlaczego warto zoptymalizować aplikację do nawigacji?
W zależności od sytuacji użytkownicy aplikacji mogą korzystać ze wskazówek nawigacyjnych przez dłuższy czas. Na przykład kierowcy i kurierzy mogą pracować przez wiele godzin, realizując zadania na nieznanym terenie. W takich przypadkach bardzo polegają na szczegółowych wskazówkach dojazdu w aplikacji. Może to powodować pewne typowe problemy:
- Rozładowywanie baterii i dostępność ładowarek. Intensywne korzystanie z nawigacji może powodować szybsze rozładowywanie się baterii urządzenia. Wielu użytkowników może rozwiązać ten problem, ładując urządzenie w pojeździe, ale kierowcy jednośladów nie mają takiej możliwości.
- Ograniczenie wydajności urządzenia z powodu przegrzania. Problemy mogą wystąpić nawet u użytkowników, którzy stale ładują urządzenie. Wysokie zużycie energii przez dłuższy czas może powodować nagrzewanie się urządzenia, co prowadzi do dławienia termicznego i późniejszego spadku wydajności.
Aplikacje do szczegółowej nawigacji korzystają z funkcji, które zużywają dużo energii, takich jak ekran, GPS i komunikacja radiowa ze stacjami bazowymi, dlatego sprawdzoną metodą jest optymalizacja zużycia energii przez aplikację mobilną. Dodatkowo weź pod uwagę potrzeby docelowych odbiorców w zakresie zużycia energii, aby znaleźć odpowiedni kompromis między wydajnością a optymalizacją zużycia energii.
Co zużywa najwięcej energii?
Ta sekcja dzieli aktywności w aplikacji związane z dużym zużyciem energii na 2 kategorie:
- Renderowanie ekranu
- Aktualizacje lokalizacji
Renderowanie ekranu
Renderowanie ekranu zwykle powoduje największe zużycie energii w aplikacjach do nawigacji mobilnej. Za każdym razem, gdy urządzenie wyświetla mapę i inne elementy interfejsu na ekranie, korzysta z procesora i GPU. Podobnie, gdy użytkownik pozostawia ten ekran włączony przez dłuższy czas, również zużywa więcej energii.
W pewnym stopniu można oczekiwać wysokiego zużycia energii przez kierowców lub pasażerów, którzy korzystają z widocznej mapy do nawigacji, zwłaszcza jeśli używają aplikacji nieprzerwanie przez wiele godzin. W tym przypadku aplikacja wykonuje też więcej operacji renderowania na ekranie, ponieważ mapa jest aktualizowana w czasie rzeczywistym. W niektórych przypadkach ekran może być odświeżany niemal bez przerwy, zwłaszcza gdy użytkownik jedzie z jednego miejsca do drugiego bez zatrzymywania się.
Aktualizacje lokalizacji
Oprócz renderowania ekranu 2 inne działania związane z nawigacją zużywają energię urządzenia:
- Korzystanie ze stacji bazowej i GPS-a
- informacje o zmianie lokalizacji i udostępnianie, np. w celu podania szacowanego czasu dotarcia na miejsce lub zgłoszenia pozycji pojazdu we flocie;
Zarówno GPS, jak i nadajnik w telefonie komórkowym wymagają do uruchomienia dużej ilości energii: GPS musi znaleźć satelity, a nadajnik musi połączyć się ze stacją bazową. Z tego powodu podczas nawigacji działają one w zasadzie nieprzerwanie, mimo że nadajniki w telefonie pozostają aktywne przez 20–30 sekund, aby zminimalizować koszty uruchomienia. System operacyjny kontroluje te ustawienia, których nie można łatwo skonfigurować w aplikacji.
W przypadku informacji o zmianie lokalizacji zużycie energii zależy od nieprzewidywalnych czynników. Na przykład odległość między urządzeniem a stacją bazową sieci komórkowej określa zużycie energii, ponieważ urządzenie będzie używać minimalnego sygnału niezbędnego do kontynuowania nawigacji, aby uniknąć przełączania wież. Dlatego urządzenie, które nawiguje na obszarze o słabym zasięgu, zużywa więcej energii niż urządzenie znajdujące się blisko stacji bazowej. Dodatkowo niektóre aplikacje mogą udostępniać informacje o zmianie lokalizacji centralnej usłudze zarządzania flotą, dlatego muszą komunikować się z serwerem.
Optymalizacja zużycia energii przez aplikację
Wyzwanie związane z optymalizacją zużycia energii w aplikacjach do nawigacji polega na tym, że aplikacje te w dużym stopniu korzystają z zasobów, które zużywają dużo energii. Ogranicza to możliwości zmniejszenia wpływu na zużycie energii bez kompromisów, takich jak ograniczenie korzystania z ekranu. W tej sekcji znajdziesz listę metod, które możesz zastosować podczas optymalizacji aplikacji, od najbardziej do najmniej skutecznych.
Zmienianie liczby klatek
Ekran aktualizuje wyświetlane treści z częstotliwością zwaną liczbą klatek, która jest zwykle mierzona w klatkach na sekundę (FPS). Renderowanie ekranu wymaga znacznego wykorzystania procesora i GPU, dlatego możesz zmniejszyć liczbę klatek, aby oszczędzać energię.
Gdy zmniejszysz liczbę klatek, renderowanie mapy i gesty interaktywne (takie jak przesuwanie, powiększanie lub obracanie) mogą wydawać się mniej płynne. Aby zachować równowagę między energooszczędnością a szybkością działania, możesz utrzymać niską podstawową liczbę klatek i dynamicznie ją zwiększać podczas aktywnych interakcji użytkownika.
Na urządzeniach z iOS pakiet Maps SDK na iOS udostępnia właściwość preferredFrameRate wGMSMapView, aby kontrolować liczbę klatek. W tabeli poniżej znajdziesz wartości GMSFrameRate, które możesz dostosować:
| Wartość Swift | Wartość Objective-C | Opis |
|---|---|---|
.powerSave |
kGMSFrameRatePowerSave |
Używaj minimalnej liczby klatek, aby oszczędzać baterię. |
.conservative |
kGMSFrameRateConservative |
Używaj średniej liczby klatek, aby zapewnić płynniejsze renderowanie i oszczędzać cykle przetwarzania. |
.maximum |
kGMSFrameRateMaximum |
Używaj maksymalnej liczby klatek na sekundę dla urządzenia (30 kl./s w przypadku urządzeń niższej klasy, 60 kl./s w przypadku urządzeń wyższej klasy). |
Więcej informacji znajdziesz w sekcji GMSFrameRate w dokumentacji pakietu Navigation SDK na iOS.
Aby bezpośrednio ustawić preferowaną liczbę klatek, przypisz wartość do mapView.preferredFrameRate:
Swift
// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = .powerSave
Objective-C
// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;
Dynamicznie dostosowuj liczbę klatek podczas gestów
Przy niższej liczbie klatek interakcje użytkownika (takie jak przesuwanie, powiększanie i obracanie) mogą wydawać się niestabilne. Możesz zachować płynność interakcji, jednocześnie oszczędzając energię, przez tymczasowe zwiększenie liczby klatek do maksimum podczas gestów użytkownika, a następnie powrót do energooszczędnej liczby klatek po zakończeniu gestu.
Aby to zrobić, zastosuj protokół GMSMapViewDelegate i zaimplementuj te metody:
- W
mapView:willMove:sprawdź, czy ruch kamery został zainicjowany przez gest użytkownika. Jeśligesturetotrue, ustawpreferredFrameRatena wartość maksymalną. - W aplikacji
mapView:idleAtCameraPosition:przywróć tryb oszczędzania energii wpreferredFrameRate, gdy kamera stanie się bezczynna.
Poniższy przykładowy kod pokazuje, jak dynamicznie dostosowywać liczbę klatek podczas gestów użytkownika:
Swift
class YourViewController: UIViewController {
@IBOutlet weak var mapView: GMSMapView!
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
// Set a baseline low frame rate to conserve power:
mapView.preferredFrameRate = .powerSave
}
}
// MARK: - GMSMapViewDelegate
extension YourViewController: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
// Increase frame rate during user gestures for smooth interaction:
if gesture {
mapView.preferredFrameRate = .maximum
}
}
func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) {
// Restore the power-saving frame rate when gestures finish:
mapView.preferredFrameRate = .powerSave
}
}
Objective-C
@interface YourViewController : UIViewController <GMSMapViewDelegate>
@end
@implementation YourViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
[super viewDidLoad];
_mapView.delegate = self;
// Set a baseline low frame rate to conserve power:
_mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}
#pragma mark - GMSMapViewDelegate
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
// Increase frame rate during user gestures for smooth interaction:
if (gesture) {
mapView.preferredFrameRate = kGMSFrameRateMaximum;
}
}
- (void)mapView:(GMSMapView *)mapView
idleAtCameraPosition:(GMSCameraPosition *)position {
// Restore the power-saving frame rate when gestures finish:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}
@end
Nawigacja bez mapy
Nie masz wpływu na to, jak użytkownik ustawia jasność ekranu urządzenia ani jak długo ekran pozostaje włączony, ale możesz udostępnić opcję wskazówek nawigacyjnych bez mapy. Dzięki temu użytkownik będzie mógł wybrać tę opcję, aby oszczędzać energię. Jeśli na przykład kierowcy regularnie pracują w tej samej okolicy, mogą nie potrzebować wskazówek na mapie tak często. Nawigację bez mapy można włączyć, ustawiając miejsce docelowe i rozpoczynając wskazówki w pakiecie Navigation SDK, ale nie wyświetlając mapy.
Dodaj wiersz kodu, aby ukryć GMSMapView:
mapView.isHidden = true
Pakiet Navigation SDK będzie nadal aktualizować lokalizacje przyciągnięte do drogi, szacowany czas dotarcia na miejsce i pozostałą odległość, a aplikacja będzie mogła nadal subskrybować wszystkie zdarzenia wywoływane przez pakiet SDK w miarę postępów kierowcy. Nie jest to odpowiednie w każdym przypadku i nie jest to dobra rada, gdy kierowca musi widzieć mapę i korzystać ze wskazówek wizualnych. Poniższe zrzuty ekranu przedstawiają porównanie przełączania widoków mapy podczas aktywnej nawigacji.
|
|
Używanie ciemnego stylu mapy
Rozważ zastosowanie ciemnego motywu, aby zmniejszyć ilość energii potrzebnej do renderowania mapy na ekranie.
Pakiet Navigation SDK renderuje mapy za pomocą pakietu Maps SDK na iOS, który zawiera opcje stylizowania widoków mapy innych niż nawigacja w aplikacji. Widok nawigacji obsługuje też wymuszanie trybu ciemnego. Ze względu na różnice w typach ekranów może to nie działać tak samo na każdym urządzeniu, ale w niektórych przypadkach pozwala oszczędzać energię. Niedawne badanie wykazało, że ilość energii zaoszczędzonej dzięki trybowi ciemnemu na niektórych ekranach zależy od tego, jak jasny jest ekran na początku. Na przykład tryb ciemny oszczędza więcej energii na ekranach ustawionych na pełną jasność niż na ekranach, których jasność jest już dostosowana do 30–50% maksymalnej. Warto o tym pamiętać, gdy używasz trybu ciemnego w aplikacjach, ponieważ oszczędność energii będzie zależeć od tego, jak użytkownik ustawi jasność ekranu.
Więcej informacji o modyfikowaniu interfejsu nawigacji znajdziesz w artykule o modyfikowaniu interfejsu nawigacji.
Definiowanie stylów map w Google Cloud wymaga identyfikatora mapy, który reprezentuje konfigurację mapy po stronie serwera utworzoną w projekcie w konsoli Google. Więcej informacji o tworzeniu identyfikatora mapy znajdziesz w dokumentacji dla deweloperów dotyczącej identyfikatora mapy. Więcej informacji o definiowaniu stylów map w Google Cloud znajdziesz w dokumentacji dla deweloperów dotyczącej tworzenia stylów map w Google Cloud i zarządzania nimi.
Zmienianie częstotliwości aktualizacji lokalizacji GPS
Jeśli chodzi o zużycie energii przez informacje o zmianie lokalizacji wysyłane z urządzenia, skup się bardziej na częstotliwości wysyłania tych informacji niż na ilości danych przesyłanych w ramach transmisji.
Nie masz nad tym bezpośredniej kontroli w Navigation SDK. Te same wskazówki dotyczą korzystania ze źródeł lokalizacji innych niż GPS (sieć komórkowa i Wi-Fi).
Udostępnianie użytkownikom przydatnych informacji
Użytkownicy Twojej aplikacji mogą chcieć wiedzieć, jak zoptymalizować zużycie energii. Aby pomóc użytkownikom zmniejszyć zużycie energii przez aplikacje, doradź im, aby:
- Zablokuj telefon
- Przełącz aplikację do nawigacji na działanie w tle.
- Jeśli to możliwe, korzystaj z nawigacji bez mapy.
- Zmniejsz jasność ekranu, używając trybu ciemnego na ekranach OLED i AMOLED lub włączając automatyczną jasność.
- Unikaj przegrzania urządzenia
- Połącz się z Wi-Fi w pojeździe, jeśli jest dostępne.
Pomiar zużycia energii
Do pomiaru zużycia energii można używać profesjonalnych narzędzi, ale ich zdobycie jest często trudne lub kosztowne. Aplikacje i narzędzia do profilowania IDE, takie jak Power Profiler w Android Studio i panel Battery Usage w XCode Organizer, mierzą zużycie energii, ale może być trudno usunąć efekt procesów w tle lub ustawić punkt odniesienia do pomiaru wydajności. W niektórych przypadkach ograniczenia urządzenia mogą uniemożliwić uzyskanie dostępu do niezbędnych danych.
Możesz użyć specjalnego sprzętu do monitorowania zasilania i zmodyfikować konfigurację połączenia baterii. Możesz też skorzystać z komercyjnych produktów i usług, które Ci w tym pomogą. Pamiętaj, że modyfikowanie urządzeń w ten sposób może spowodować utratę gwarancji.