Zoptymalizuj zużycie energii przez aplikację

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 w nieznanych miejscach. W takich przypadkach bardzo polegają na szczegółowych wskazówkach dojazdu w aplikacji. Powoduje to pewne typowe problemy:

  • Zużycie 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 warto zoptymalizować zużycie energii przez aplikację mobilną. Dodatkowo należy wziąć 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 układu graficznego. 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 energię urządzenia zużywają 2 inne działania związane z nawigacją:

  • korzystanie ze stacji bazowych 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 uruchamiania. Te ustawienia są kontrolowane przez system operacyjny i nie można ich ł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 się między wieżami. 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 te aplikacje 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 utrzymywać niską podstawową liczbę klatek i dynamicznie ją zwiększać podczas aktywnych interakcji użytkownika.

Więcej informacji o modyfikowaniu liczby klatek znajdziesz w sekcji Liczba klatek w dokumentacji dla deweloperów w Android Media Dev Center.

Automatyczne dostosowywanie liczby klatek

Od wersji 7.8.0 pakiet Navigation SDK automatycznie dostosowuje liczbę klatek mapy podczas aktywnej nawigacji, aby zwiększyć wydajność i zmniejszyć zużycie baterii. Gdy urządzenie przechodzi w tryb oszczędzania energii, liczba klatek na mapie spada do 10 FPS i wraca do 60 FPS po zakończeniu nawigacji lub wyłączeniu trybu oszczędzania energii.

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 może 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.

Aby ukryć interfejs nawigacji, nie dodawaj elementu NavigationView ani SupportNavigationFragment. Jeśli już to zrobiono, usuń kod, który je dodaje. Poniższy kod został zmodyfikowany na podstawie aplikacji demonstracyjnej na Androida z pakietem Navigation SDK i pokazuje użycie komentarzy do usunięcia kodu, który dodaje interfejs nawigacji:

//Obtain a reference to the NavigationFragment
//setContentView(R.layout.activity_nav_fragment);
//mNavFragment = (SupportNavigationFragment)   getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);

Pakiet Navigation SDK będzie nadal aktualizować lokalizacje przyciągnięte do drogi, szacowany czas dotarcia na miejsce i pozostałą odległość, a Twoja aplikacja może nadal subskrybować wszystkie zdarzenia wywoływane przez pakiet SDK, gdy kierowca jedzie. 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.

Aplikacja demonstracyjna z widocznym widokiem mapy.
Rysunek 1. Aplikacja demonstracyjna na iOS z pakietem Navigation SDK pokazująca wersję demonstracyjną Data Back
Aplikacja w wersji demonstracyjnej działa bez widocznego widoku mapy.
Rysunek 2. Aplikacja w wersji demonstracyjnej działająca bez widocznego widoku mapy. Zwróć uwagę, że pozostały czas i odległość oraz lokalizacja przyciągnięta do drogi są nadal aktualizowane.

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 Androida, 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.

Pakiet Navigation SDK działający na iPhonie 15 Pro z ciemnym stylem mapy.
Rysunek 3. Pakiet Navigation SDK skonfigurowany z ciemnym stylem mapy

Aby utworzyć ciemny styl mapy, użyj obiektu MapStyleOptions ze stylem JSON, który reprezentuje wybrany przez Ciebie ciemny styl mapy. Starsze style JSON można tworzyć za pomocą starszego edytora stylów na stronie https://mapstyle.withgoogle.com/.

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 możesz tego kontrolować bezpośrednio w pakiecie Navigation SDK, ale jeśli Twoja aplikacja na Androida prosi o lokalizację niezależnie, weź pod uwagę wskazówki zawarte w artykule o optymalizacji lokalizacji pod kątem oszczędzania baterii w dokumentacji dla deweloperów aplikacji na Androida. Ta sama rada dotyczy korzystania ze źródeł lokalizacji innych niż GPS (sieć komórkowa i Wi-Fi).

Szkolenie użytkowników

Użytkownicy Twojej aplikacji mogą chcieć wiedzieć, jak zoptymalizować zużycie energii. Aby pomóc użytkownikom zmniejszyć zużycie energii przez aplikacje, poradź 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.
Wskazówki dla użytkowników dotyczące wydłużania czasu pracy urządzenia z Androidem na baterii znajdziesz w artykule Wydłużanie czasu pracy urządzenia z Androidem na baterii. Pamiętaj, że te porady obejmują działania, które mogą pogorszyć skuteczność aplikacji do nawigacji, jak opisano w sekcji Optymalizowanie zużycia energii przez aplikację w tym przewodniku.

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 wykorzystania baterii w XCode Organizer, mierzą zużycie energii, ale może być trudno usunąć efekt procesów w tle lub ustawić punkt odniesienia wydajności, który będzie służył do pomiaru. 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.