Korzystanie z bezprzewodowego radia do przesyłania danych jest prawdopodobnie jedną z najważniejszych może to znacznie wpływać na zużycie baterii. Aby zminimalizować zużycie baterii związane z aktywizacją sieci, musisz zrozumieć, jak Twój model łączności wpłynie na sprzęt radiowy.
W tej sekcji przedstawiamy maszynę stanów bezprzewodowego radia i wyjaśniamy, jak model łączności aplikacji z nią współdziała. Następnie udostępnia kilka metod co pozwoli zminimalizować wpływ, jaki mają dane aplikacji. zużycie baterii.
Maszyna stanów radia
Radio bezprzewodowe na urządzeniu użytkownika ma wbudowane funkcje oszczędzania energii, pomagają zminimalizować ilość zużywanej przez nie energii baterii. W pełni aktywne radio bezprzewodowe zużywa znaczną ilość energii, ale w stanie nieaktywnym lub w stanie gotowości zużywa bardzo mało energii.
Należy pamiętać, że radio nie może przejść z trybu gotowości do trybu czuwania. natychmiast po włączeniu pełnej aktywności. Czas oczekiwania jest związany z „włączaniem” radia. W ten sposób bateria przechodzi ze stanu wyższego poziomu energii na Wolno obniżaj energię, aby oszczędzać energię, gdy nie jest używana próba skrócenia czasu oczekiwania związanego z „włączaniem”; radia.
Maszyna stanów typowego radia sieci 3G składa się z 3 stanów energii:
- Pełna zasilanie: używana, gdy połączenie jest aktywne, dzięki czemu urządzenie może: przesyłać dane z najwyższą możliwą szybkością.
- Niski poziom energii: stan pośredni, który zmniejsza zużycie energii baterii o około 50%.
- Tryb czuwania: minimalny stan zużywania energii, w którym brak sieci połączenie jest aktywne.
Choć tryby niskiego i czuwania zużywają znacznie mniej baterii, mogą znacznie wpływać na czas oczekiwania na żądania sieciowe. Powrót do pełnego zasilania od tryb niskiego tętna trwa około 1, 5 sekundy i przełącza się z trybu czuwania do pełnego zasilania może potrwać ponad 2 sekundy.
Aby zminimalizować opóźnienie, maszyna stanów używa opóźnienia, aby opóźnić przejście do stanów o mniejszym zużyciu energii. Ilustracja 1. wykorzystywała czasy AT&T dla typowego radia 3G.
()
Rysunek 1. Typowa maszyna stanów bezprzewodowego radia 3G.
Maszyna stanów radiowych na każdym urządzeniu, w szczególności powiązane opóźnienie przejścia („czas ogonowy”) i opóźnienie uruchamiania, będzie się różnić w zależności od zastosowanej technologii radiowej (3G, LTE, 5G itd.) i jest definiowana i konfigurowana przez sieć operatora, w której działa urządzenie.
Na tej stronie opisujemy reprezentatywny stan urządzenia dla typowej sieci bezprzewodowej 3G na podstawie danych firmy AT&T. Jednak ogólne zasady powstałe w ten sposób sprawdzone metody mają zastosowanie do wszystkich implementacji radia bezprzewodowego.
To podejście jest szczególnie skuteczne w przypadku zwykłego przeglądania internetu na urządzeniach mobilnych, ponieważ zapobiega niechcianym opóźnieniom podczas przeglądania internetu. Względnie niska Dzięki niemu po zakończeniu sesji przeglądania, radio może przejść na niższy stan energii.
Niestety takie podejście może spowodować nieefektywną pracę aplikacji na nowoczesnych systemach operacyjnych, takich jak Android, gdzie aplikacje działają zarówno na pierwszym planie (gdzie ważna jest opóźnienie) jak i w tle (gdzie priorytetem jest czas pracy baterii).
Jak aplikacje wpływają na maszynę stanu radia
Za każdym razem, gdy tworzysz nowe połączenie sieciowe, radio przenosi się do na pełnej baterii. W przypadku typowego sterownika stanu radia 3G opisanego wcześniej będzie on działać z pełną mocą przez cały czas przesyłania danych (plus dodatkowe 5 sekund na czas trwania ogonu) i przez 12 sekund w stanie niskiego zużycia energii. W przypadku typowego urządzenia 3G każda sesja przesyłania danych powoduje aby pobierać energię na co najmniej 18 sekund.
W praktyce oznacza to, że aplikacja, która trzy razy na minutę prześle dane przez Bluetooth w ciągu 1 sekundy, będzie utrzymywać moduł radiowy w stanie ciągłej aktywności, co spowoduje, że w momencie przejścia w tryb gotowości znów przejdzie on w tryb wysokiej mocy.
()
Rysunek 2. Względne zużycie energii radiowej na potrzeby przesyłania danych w ciągu 1 sekundy
trzy razy na minutę. Rysunek nie zawiera przycisku „Doładowanie” opóźnienia między uruchomieniami.
Jeśli ta sama aplikacja spakowałaby swoje transfery danych, wykonując jeden 3-sekundowy transfer co minutę, radio pozostałoby w stanie wysokiej mocy przez łącznie tylko 20 sekund na minutę. Dzięki temu radio będzie pozostają w trybie gotowości przez 40 sekund z każdej minuty, co skutkuje znacznym i zmniejsza zużycie baterii.
()
Rysunek 3. Względne zużycie energii w zakresie częstotliwości radiowych w przypadku transferów trwających 3 sekundy, które są wykonywane raz na minutę.
Techniki optymalizacji
Wiesz już, jak dostęp do sieci wpływa na żywotność baterii. Przejdźmy więc o tym, co możesz zrobić, aby ograniczyć szybkie zużycie baterii, Zapewnia to użytkownikom szybką i płynną obsługę.
Przenoszenie danych w pakiecie
Jak wspomnieliśmy w poprzedniej sekcji, przesyłanie danych jest łączone w taki sposób, aby rzadsze przesyłanie danych to jeden z najlepszych sposobów na oszczędzanie baterii efektywność.
Oczywiście nie zawsze jest to możliwe, jeśli aplikacja musi otrzymać lub wysłać dane natychmiast w odpowiedzi na działanie użytkownika. Możesz temu zaradzić poprzez przewidywania i wstępnego pobierania danych. Inne scenariusze, takie jak wysyłanie dzienników lub danych analitycznych na serwer oraz inne niepilne przesyłanie danych inicjowane przez aplikację, doskonale nadają się do grupowania i zbiorczości. Patrz artykuł Optymalizacja inicjowane przez aplikację zadania dla wskazówek na temat planowania transferów sieciowych w tle.
pobieranie z wyprzedzeniem,
Pobieranie z wyprzedzeniem to kolejny skuteczny sposób zmniejszenia liczby niezależnych i procesie przenoszenia danych. Przy pobieraniu z wyprzedzeniem, gdy użytkownik wykona działanie w aplikacji, aplikacja przewiduje, które dane najprawdopodobniej zostaną być potrzebny do wykonania następnej serii działań użytkownika i pobrać je w jednym w ramach pojedynczego połączenia z pełną mocą.
Zlecając przelewy z wyprzedzeniem, zmniejszasz liczbę aktywacji radiowych które są wymagane do pobrania danych. W rezultacie nie tylko wydłużasz czas pracy na baterii, ale także skrócić czas oczekiwania, zmniejszyć wymaganą przepustowość i ograniczyć pobieranie razy.
Pobieranie z wyprzedzeniem poprawia też wygodę użytkowników, ponieważ minimalizuje liczbę wyświetleń w aplikacji opóźnienie spowodowane oczekiwaniem na zakończenie pobierania przed wykonaniem działania lub przeglądanie danych.
Oto praktyczny przykład.
Czytnik wiadomości
Wiele aplikacji informacyjnych stara się ograniczyć wykorzystanie przepustowości, pobierając nagłówki dopiero po wybraniu kategorii, pełne artykuły tylko wtedy, gdy użytkownik chce je przeczytać, a miniatury dopiero wtedy, gdy pojawią się na ekranie.
Dzięki temu radio pozostaje aktywne przez większość sesji czytania wiadomości, gdy użytkownicy przewijają nagłówki, zmieniają kategorie i czytają artykuły. Oprócz tego ciągłe przełączanie między stanami energii powoduje znaczne opóźnienie przy przełączaniu kategorii lub odczytywaniu, artykuły.
Lepszym podejściem jest pobieranie w ramach wstępnego pobierania danych odpowiedniej ilości danych na początku, zaczynając od pierwszego zestawu nagłówków i miniatur wiadomości (co zapewni krótki czas uruchamiania), a następnie kontynuując z pozostałymi nagłówkami i miniaturami oraz tekstem artykułu dla każdego artykułu dostępnego z co najmniej listy głównych nagłówków.
Innym rozwiązaniem jest pobieranie z wyprzedzeniem wszystkich nagłówków, miniatur, tekstów artykułów a nawet całe zdjęcia – zwykle w tle na ze wstępnie zdefiniowanego harmonogramu. Takie podejście wymaga sporego wykorzystania przepustowości i żywotność baterii podczas pobierania treści, które nie są nigdy używane, więc należy je zaimplementować z rozwagą.
Dodatkowe uwagi
Chociaż pobieranie danych w ramach przewidywania zapotrzebowania przynosi wiele korzyści, zbyt agresywne korzystanie z tego rozwiązania może prowadzić do zwiększonego zużycia baterii i pasma, a także do przekroczenia limitu pobierania danych, ponieważ pobierane są dane, których nie używasz. To także jest ważne, aby upewnić się, że pobieranie z wyprzedzeniem nie opóźni uruchomienia aplikacji, gdy aplikacja czeka na zakończenie pobierania z wyprzedzeniem. W praktyce może to oznaczać stopniowe przetwarzanie danych lub inicjowanie kolejnych transferów w taki sposób, aby dane wymagane do uruchomienia aplikacji były pobierane i przetwarzane w pierwszej kolejności.
Agresywność pobierania danych zależy od wielkości pobieranych danych i ich prawdopodobieństwa użycia. Zgodnie z opracowanym wcześniej modelem maszyny stanów, w przypadku danych, które mają 50% prawdopodobieństwo użycia w ramach bieżącej sesji użytkownika, możesz zwykle pobierać dane w poprzednim planie na około 6 sekund (około 1–2 megabajtów), zanim potencjalny koszt pobrania nieużywanych danych zrówna się z potencjalnymi oszczędnościami wynikającymi z niepobierania tych danych.
Ogólnie rzecz biorąc, dobrym zwyczajem jest pobieranie danych w tle, aby trzeba było inicjować kolejne pobieranie tylko co 2–5 minut, w ilości około 1–5 megabajtów.
Zgodnie z tą zasadą duże pliki do pobrania, np. pliki wideo, powinny być pobierane we fragmentach w regularnych odstępach czasu (co 2–5 minut), skutecznie pobiera z wyprzedzeniem tylko dane o filmach, które mogą zostać wyświetlone w ciągu najbliższych kilku minut.
Jednym z rozwiązań jest zaplanowanie pełnego pobierania tylko wtedy, gdy urządzenie jest połączone z Wi-Fi, a ewentualnie tylko wtedy, gdy jest ładowane. Interfejs API WorkManager obsługuje dokładnie ten przypadek użycia, co pozwala ograniczyć działanie w tle dopóki urządzenie nie spełni kryteriów określonych przez dewelopera, takich jak ładowanie czy połączenia z Wi-Fi.
Sprawdzanie łączności przed wysyłaniem żądań
Wyszukiwanie sygnału komórkowego to jedne z najbardziej pochłaniających energię
urządzenia mobilnego. W przypadku żądań zainicjowanych przez użytkownika sprawdzoną metodą jest
połączenie za pomocą
ConnectivityManager
, jak widać tutaj:
Monitorowanie stanu i połączenia
i pomiarów wykorzystania limitu.
Jeśli nie ma sieci, aplikacja może oszczędzać baterię, nie wymuszając wyszukiwania przez radio. Żądanie można zaplanować i wykonać w grupie z innymi
żądania podczas nawiązywania połączenia.
Połączenia z pulą
Dodatkową strategią, która może okazać się pomocna poza grupowaniem i pobieraniem z wyprzedzeniem, jest do łączenia połączeń sieciowych aplikacji.
Ogólnie rzecz biorąc, ponowne używanie istniejących połączeń sieciowych jest bardziej wydajne niż inicjowanie nowych. Dzięki temu sieć może też inteligentniej reagować na przeciążenia i powiązane z nimi problemy z danymi sieciowymi.
HttpURLConnection
i większość HTTP
takich jak OkHttp,
Domyślne pulsowanie połączeń i ponowne używanie tego samego połączenia w wielu
żądań.
Podsumowanie i plany na przyszłość
W tej sekcji dowiesz się wiele o radiu bezprzewodowym oraz o kilku strategiach, które możesz stosować na szeroką skalę, aby zapewnić użytkownikom szybkie i wygodne działanie aplikacji przy jednoczesnym ograniczeniu zużycia baterii.
W następnej sekcji szczegółowo omówimy 3 typy interakcji z siecią, które są wspólne dla większości aplikacji. Nauczysz się sterowników dla każdego jak również nowoczesnych technik i interfejsów API do zarządzania efektywne interakcje.