Android ma 2 funkcje oszczędzania energii, które pozwalają wydłużyć czas pracy na baterii o zarządzanie zachowaniem aplikacji, gdy urządzenie nie jest podłączone do źródła zasilania: Uśpienie i tryb czuwania aplikacji. Uśpienie zmniejsza zużycie baterii przez odroczenie aktywność procesora w tle i aktywność sieci dla aplikacji, gdy urządzenie jest długo nieużywane określonych okresów. Czuwanie aplikacji opóźnia aktywność sieciową w tle przez aplikacje bez niedawnej aktywności użytkownika.
Gdy urządzenie jest w trybie uśpienia, dostęp do niektórych usług zużywających dużo energii zasoby są odroczone do okresu konserwacji. Konkretne ograniczenia są wymienione w Zarządzanie zasilaniem ograniczenia.
Uśpienie i tryb gotowości aplikacji zarządzają działaniem wszystkich aplikacji działających na Androidzie 6.0 lub wyższym, niezależnie od tego, czy są one kierowane konkretnie na poziom API 23. Aby zapewnić użytkownikom najlepsze wrażenia, przetestuj aplikację za pomocą funkcji Uśpienie i Aplikacja. w trybie gotowości i w razie potrzeby wprowadzić niezbędne zmiany w kodzie. Poniżej zawierają szczegółowe informacje.
Na czym polega uśpienie
Jeśli użytkownik pozostawi urządzenie odłączone i nie rusza się przez określony czas, Gdy ekran zostanie wyłączony, urządzenie przejdzie w tryb uśpienia. W trybie uśpienia system próbuje aby oszczędzać baterię, ograniczając działanie aplikacji dostęp do sieci i dużej mocy procesora usług Google. Uniemożliwia też aplikacjom dostęp do sieci i opóźnia zadań, synchronizacji i alarmów standardowych.
Okresowo system na chwilę wyłącza tryb uśpienia, aby umożliwić działanie aplikacji. odroczoną aktywność. W trakcie tego okresu konserwacji system uruchamia wszystkie oczekujące synchronizacje, zadania i alarmy oraz umożliwia aplikacjom dostęp do sieci.
![](https://developer.android.com/static/images/training/doze.png?authuser=0000&hl=pl)
Po zakończeniu okresu konserwacji system ponownie przejdzie w tryb uśpienia, zawieszania dostępu do sieci oraz odroczenia zadań, synchronizacji i alarmów. Z czasem system rzadziej planuje okresy konserwacji, co pomaga oszczędzać baterię zużycie energii w przypadku dłuższego braku aktywności, gdy urządzenie się nie ładuje.
Gdy użytkownik wybudzi urządzenie, przesuwając je, włączając ekran lub podłączenie ładowarki, system zamyka tryb uśpienia i wszystkie aplikacje wracają do normy działania.
Ograniczenia dotyczące uśpienia
W trybie uśpienia system stosuje do aplikacji te ograniczenia:
- Zawiesza dostęp do sieci.
- Ignoruje wybudzenie zamków.
- Odrocz standardowy
AlarmManager
alarmy, w tymsetExact()
orazsetWindow()
, na następny okres konserwacji.- Jeśli chcesz ustawić alarm, który uruchomi się w trybie uśpienia,
setAndAllowWhileIdle()
lubsetExactAndAllowWhileIdle()
- Alarmy ustawione w:
setAlarmClock()
nadal uruchamiają się normalnie. System kończy działanie funkcji Uśpienie tuż przed Alarmy.
- Jeśli chcesz ustawić alarm, który uruchomi się w trybie uśpienia,
- Nie skanuje sieci Wi-Fi.
- Nie pozwala na uruchamianie adapterów synchronizacji.
- Nie pozwala
JobScheduler
bieganie.
Lista kontrolna uśpienia
- Jeśli to możliwe, używaj Komunikacji w chmurze Firebase (FCM) w przypadku zdarzeń podrzędnych wiadomości.
- Jeśli użytkownicy muszą od razu zobaczyć powiadomienie, użyj Wiadomość o wysokim priorytecie w FCM. Stosuj wysoki priorytet tylko w przypadku tych wiadomości w powiadomieniu. Więcej wskazówek znajdziesz tutaj: Funkcja FCM zapoznaj się z dokumentacją na temat priorytetu wiadomości w Androidzie.
- Podaj wystarczające informacje w początkowej wiadomości ładunek, w związku z czym późniejsze korzystanie z sieci nie jest konieczne.
- Ustawiaj krytyczne alarmy w aplikacjach
setAndAllowWhileIdle()
isetExactAndAllowWhileIdle()
- Testowanie aplikacji w trybie Uśpienie
Dostosowywanie aplikacji do funkcji Uśpienie
Uśpienie może różnie wpływać na działanie aplikacji w zależności od oferowanych funkcji. i używanych przez nie usług. Wiele aplikacji działa normalnie w trybie uśpienia bez modyfikacji. Czasem trzeba zoptymalizować sposób, w jaki aplikacja zarządza siecią, alarmami, zadaniami i synchronizacją. Aplikacje muszą mieć możliwość i zarządzać działaniami w każdym okresie konserwacji.
Aby ułatwić sobie planowanie alarmów, możesz użyć 2 opcji AlarmManager
metody: setAndAllowWhileIdle()
i
setExactAndAllowWhileIdle()
Dzięki tym metodom możesz ustawiać alarmy
uruchamianych nawet wtedy, gdy urządzenie jest uśpione.
Ograniczenie uśpienia dostępu do sieci może też mieć wpływ na Twoją aplikację, zwłaszcza jeśli aplikacja obsługuje wiadomości w czasie rzeczywistym, takie jak łaskotki powiadomienia. Jeśli aplikacja wymaga stałego połączenia z siecią, do odbierania wiadomości, użyj Komunikacji w chmurze Firebase (FCM), jeśli jak to tylko możliwe.
Aby sprawdzić, czy aplikacja działa zgodnie z oczekiwaniami, możesz użyć polecenia
Polecenia adb
, które wymuszają w systemie włączenie i zamknięcie funkcji Uśpienie i
obserwować zachowanie aplikacji. Więcej informacji:
Testowanie za pomocą funkcji Uśpienie i Czuwanie aplikacji
Informacje o trybie czuwania aplikacji
Tryb czuwania aplikacji pozwala systemowi określić, czy aplikacja jest bezczynna, gdy użytkownik nie jest aktywny podczas używania aplikacji. System określa to, czy użytkownik nie dotknij aplikacji przez określony czas, bez żadnego z poniższych warunków dotyczy:
- Użytkownik samodzielnie uruchamia aplikację.
- Aplikacja ma proces obecnie na pierwszym planie jako działanie lub usługi na pierwszym planie albo w użyciu przez inną aktywność lub usługę na pierwszym planie.
- Aplikacja wygeneruje powiadomienie, które użytkownicy zobaczą na ekranie blokady lub w aplikacji na pasku powiadomień.
Gdy użytkownik podłącza urządzenie do zasilania, system publikuje aplikacje w stanie gotowości, dzięki czemu może on swobodnie korzystać z sieci i wykonywać oczekujących zadań i synchronizacji. Jeśli urządzenie jest długo nieaktywne, umożliwia nieaktywnym aplikacjom dostęp do sieci mniej więcej raz dziennie.
Korzystaj z FCM, aby korzystać z aplikacji, gdy urządzenie jest bezczynne
Chmura Firebase Messaging (FCM) to usługa działająca między chmurą, która umożliwia obsługę wiadomości w czasie rzeczywistym w ramach przesyłania wiadomości między usługami backendu i aplikacjami na urządzeniach z Androidem. Menedżer Społeczności zapewnia pojedyncze, trwałe połączenie z chmurą. Wszystkie aplikacje wymagające wiadomości w czasie rzeczywistym mogą udostępniać to połączenie. To współdzielone połączenie znacznie optymalizuje zużycie baterii, eliminując konieczność wielu aplikacji pod kątem utrzymywania własnych, oddzielnych trwałych połączeń, gwałtowne rozładowywanie baterii. Jeśli aplikacja wymaga wysyłania wiadomości, z usługą backendu, zdecydowanie zalecamy korzystanie z FCM, jest to możliwe, zamiast utrzymywania własnego stałego połączenia sieciowego.
FCM jest zoptymalizowane do pracy z trybami uśpienia i czuwania aplikacji. Menedżer Społeczności wiadomości o wysokim priorytecie pozwalają wybudzić aplikację, aby zaangażować użytkownika. Uśpienie lub aplikacja w trybie gotowości, system dostarcza wiadomość i przyznaje aplikacji tymczasowy dostęp; do usług sieciowych i częściowych blokad uśpienia, a następnie zwraca urządzenie lub aplikację stanie bezczynności. W przypadku pilnych powiadomień widocznych dla użytkowników rozważ wybranie wysokiej wiadomości priorytetowe, aby umożliwić ich dostarczanie w trybie uśpienia. Wiadomości o wysokim priorytecie mogą powodują wyświetlanie powiadomień. Zobacz Funkcja FCM wskazówek na temat wiadomości o wysokim priorytecie.
W przypadku wiadomości, które nie powodują otrzymywania powiadomień, np. zapisywania zawartości aplikacji aktualizowanie w tle lub inicjowanie synchronizacji danych, używaj normalnego priorytetu FCM. wiadomości. Wiadomości o normalnym priorytecie są dostarczane natychmiast, jeśli urządzenie nie w trybie Uśpienie. Jeśli urządzenie jest w trybie uśpienia, są dostarczane okresowo. Uśpienie okresu konserwacji lub od razu po wybudzeniu urządzenia przez użytkownika.
Ogólnie rzecz biorąc, jeśli Twoja aplikacja wymaga wysyłania wiadomości do klienta, użyj FCM. Jeśli Twoja aplikacja korzysta już z FCM, upewnij się, że używa wiadomości o wysokim priorytecie. tylko w przypadku wiadomości, które powodują wyświetlenie powiadomień dla użytkowników.
Pomoc do innych zastosowań
Prawie wszystkie aplikacje obsługują uśpienie, zarządzając połączeniami sieciowymi. alarmów, zadań i synchronizacji oraz za pomocą wiadomości FCM. Dla wąskiego grona zastosowań przypadków, może to być niewystarczające. W takich przypadkach system zapewnia konfigurowalna lista aplikacji, które są częściowo zwolnione z funkcji Uśpienie i Czuwanie aplikacji i optymalizacji.
Aplikacja, która jest częściowo wykluczona, może korzystać z sieci i wstrzymywać częściowe wybudzanie
blokady w trybie uśpienia i czuwania aplikacji. Nadal jednak obowiązują inne ograniczenia
do aplikacji, tak jak w przypadku innych aplikacji. Na przykład: zadania i synchronizacje aplikacji
są odroczone na poziomie API 23 i niższym oraz
AlarmManager
alarmów się nie włącza. Aplikacja może sprawdzić, czy
obecnie na liście zwolnień, wywołując
isIgnoringBatteryOptimizations()
Użytkownicy mogą ręcznie skonfigurować listę wykluczonych aplikacji w Ustawieniach > Bateria > Optymalizacja baterii. System może również umożliwia aplikacjom proszenie użytkowników o zwolnienie z obowiązku spełniania wymogów tych zasad:
- Większość aplikacji może wywoływać intencję zawierającą
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
- Aplikacje, które spełniają dopuszczalne przypadki użycia
może zamiast tego wywołać intencję zawierającą
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
działanie intencji, które pozwoli użytkownikowi bezpośrednio dodać aplikację do listy wykluczeń. bez otwierania ustawień systemowych.
Aplikacja może sprawdzić, czy znajduje się na liście wykluczeń, wywołując
isIgnoringBatteryOptimizations()
Testowanie za pomocą funkcji Uśpienie i Czuwanie aplikacji
Aby zadbać o wygodę użytkowników, przetestuj aplikację w trybie Uśpienie i tryb czuwania aplikacji.
Testowanie aplikacji za pomocą funkcji Uśpienie
Aby przetestować tryb uśpienia, wykonaj te czynności:
- Konfigurowanie urządzenia lub urządzenia wirtualnego z Androidem 6.0 (interfejs API) na poziomie 23) lub wyższym.
- Podłącz urządzenie do komputera, na którym pracujesz, i zainstaluj aplikację.
- Uruchom aplikację i pozostaw ją aktywną.
- Wymuś tryb bezczynności systemu, uruchamiając następujące polecenie:
$ adb shell dumpsys deviceidle force-idle
- Gdy wszystko będzie gotowe, wyjdź z trybu bezczynności, uruchamiając to polecenie:
$ adb shell dumpsys deviceidle unforce
- Ponownie aktywuj urządzenie, wykonując to polecenie:
$ adb shell dumpsys battery reset
- Przyjrzyj się działaniu aplikacji po ponownym włączeniu urządzenia. Marka aby po wyjściu z trybu uśpienia
Testowanie aplikacji w trybie gotowości
Aby przetestować tryb gotowości aplikacji, wykonaj te czynności:
- Konfigurowanie urządzenia lub urządzenia wirtualnego z Androidem 6.0 (interfejs API) na poziomie 23) lub wyższym.
- Podłącz urządzenie do komputera, na którym pracujesz, i zainstaluj aplikację.
- Uruchom aplikację i pozostaw ją aktywną.
- Wymuś przejście aplikacji w tryb gotowości, uruchamiając te polecenia:
$ adb shell dumpsys battery unplug $ adb shell am set-inactive <packageName> true
- Wykonaj symulację wybudzania aplikacji za pomocą tych poleceń:
$ adb shell am set-inactive <packageName> false $ adb shell am get-inactive <packageName>
- Obserwuj działanie aplikacji po jej wybudzeniu. Upewnij się, że aplikacja płynnie przechodzi w tryb gotowości. W szczególności sprawdź, czy powiadomienia i zadania w tle działają zgodnie z oczekiwaniami.
Dopuszczalne przypadki użycia zwolnienia z opodatkowania
W tabeli poniżej opisujemy kilka przypadków użycia oraz wskazujemy, czy jest on akceptowany
aby aplikacje mogły korzystać z ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
działanie intencji. Ogólnie aplikacja nie spełnia tych wymagań:
wyjątkami, chyba że Uśpienie lub Czuwanie aplikacji spowoduje przerwanie głównej funkcji aplikacji lub
z przyczyn technicznych aplikacja nie może używać FCM o wysokim priorytecie
wiadomości.
Więcej informacji znajdziesz w artykule Pomoc techniczna dotycząca i innych przypadkach użycia.
Typ | Przypadek użycia | Czy można używać FCM? | Czy to zwolnienie jest dozwolone? | Uwagi |
---|---|---|---|---|
komunikator internetowy, czat lub aplikacje do połączeń; | Wymaga dostarczania w czasie rzeczywistym wiadomości do użytkowników podczas urządzenie jest w trybie uśpienia lub aplikacja jest w trybie gotowości. | Tak, używam FCM | Niedozwolone | Używaj wiadomości o wysokim priorytecie w FCM, aby wybudzić aplikację i uzyskać dostęp w sieci. |
Tak, ale nie używa wiadomości o wysokim priorytecie w FCM. | ||||
komunikator internetowy, czat lub aplikacja do połączeń; firmowych aplikacji VOIP. | Nie, nie można używać FCM ze względu na zależność techniczną od innej wiadomości lub uśpienie i tryb gotowości aplikacji zakłócają jej działanie. | Akceptowalna | ||
Aplikacja Bezpieczeństwo. | Są to aplikacje, które zapewniają bezpieczeństwo użytkownikom i ich rodzinom. | W odpowiednich przypadkach. | Akceptowalna | |
Aplikacja do automatyzacji zadań. | Główna funkcja aplikacji to planowanie zautomatyzowanych działań, np. natychmiastowego działania wiadomości, połączenia głosowe i zarządzanie zdjęciami. | W odpowiednich przypadkach. | Akceptowalna | |
Aplikacja towarzysząca urządzenia peryferyjnego. | Główną funkcją aplikacji jest utrzymanie stałego połączenia z urządzenie peryferyjne, aby dostarczyć mu urządzenie peryferyjne dostęp do internetu. | W odpowiednich przypadkach. | Akceptowalna | |
Aplikacja musi okresowo łączyć się z urządzeniem peryferyjnym, aby przeprowadzić synchronizację. lub tylko z urządzeniami, takimi jak słuchawki bezprzewodowe, przez standardowe profile Bluetooth. | W odpowiednich przypadkach. | Niedozwolone |