Aby wydłużyć czas pracy baterii urządzenia, Android może wpływać na stan urządzenia, monitorując jego użycie i stan czuwania. Platforma może przejść w stan uśpienia, aby wstrzymać działanie, gdy urządzenie nie jest używane.
O Dozie
Doze wydłuża czas pracy baterii, opóźniając działanie procesora aplikacji i aktywności sieciowej w tle, gdy urządzenie nie jest używane przez dłuższy czas.
Bezczynne urządzenia w trybie Doze okresowo wchodzą w okno konserwacji, podczas którego aplikacje mogą dokończyć oczekujące prace (synchronizacje, zadania itp.). Następnie funkcja Doze wznawia sen na dłuższy okres czasu, po czym następuje kolejne okno konserwacji. Platforma kontynuuje sekwencję uśpienia/konserwacji drzemki, za każdym razem zwiększając długość okresu bezczynności, aż do osiągnięcia maksymalnie kilku godzin czasu snu. Urządzenie w trybie Doze jest przez cały czas świadome ruchu i natychmiast opuszcza tryb Doze, jeśli zostanie wykryty ruch.
Android 7.0 i nowsze rozszerza funkcję Doze, uruchamiając lżejszy zestaw optymalizacji za każdym razem, gdy użytkownik wyłączy ekran urządzenia, nawet gdy użytkownik nadal się porusza, co zapewnia dłuższą żywotność baterii.
Krytyczne usługi systemowe są zazwyczaj konfigurowane przez producentów urządzeń tak, aby były wyłączone z funkcji Doze. Użytkownicy mogą także wyłączyć określone aplikacje z funkcji Doze, korzystając z menu Ustawienia. Jednak wykluczenie aplikacji może spowodować zużycie baterii urządzenia. Domyślnie funkcja Doze jest wyłączona w AOSP; szczegółowe informacje na temat włączania drzemki można znaleźć w części Integracja drzemki .
Wymagania dotyczące drzemki
Obsługa funkcji Doze wymaga, aby urządzenie posiadało usługę przesyłania wiadomości w chmurze, taką jak Firebase Cloud Messaging (FCM) . Zewnętrzne zdarzenia wyzwalające, takie jak wiadomości w chmurze, mogą tymczasowo obudzić aplikacje do pracy, gdy urządzenie pozostaje w trybie drzemki.
Obsługa pełnej drzemki wymaga również znacznego czujnika ruchu (SMD) w urządzeniu; jednakże lekki tryb drzemki w systemie Android 7.0 i nowszych wersjach nie wymaga SMD. Jeśli funkcja Doze jest włączona na urządzeniu, które:
- Ma SMD, występują optymalizacje pełnego drzemki (w tym lekkie optymalizacje).
- Nie ma SMD, występują tylko lekkie optymalizacje Doze.
Cykl życia drzemki
Drzemka rozpoczyna się, gdy platforma wykryje, że urządzenie jest bezczynne, i kończy się, gdy wystąpi jedno lub więcej działań spełniających kryteria wyjścia.
Platforma wykrywa, że urządzenie jest bezczynne, gdy:
- Urządzenie jest nieruchome (przy użyciu SMD).
- Ekran urządzenia jest wyłączony przez pewien czas.
Tryb drzemki nie włącza się, gdy urządzenie zasilane bateryjnie jest podłączone do ładowarki.
Podczas drzemki
Platforma próbuje utrzymać system w stanie uśpienia, okresowo wznawiając normalne działanie w oknie konserwacyjnym, a następnie ponownie przełączając urządzenie w tryb uśpienia na dłuższe okresy. Podczas snu aktywne są następujące ograniczenia:
- Aplikacje nie mają dostępu do sieci.
- Zignorowano wakelocki aplikacji.
- Alarmy są odroczone. Nie obejmuje alarmów budzika i alarmów ustawionych za pomocą metody
setAndAllowWhileIdle()
(ograniczone do 1 na 15 minut na aplikację w trybie drzemki). To wyjątek dotyczy aplikacji (takich jak Kalendarz), które muszą wyświetlać powiadomienia o przypomnieniach o wydarzeniach. - Skanowania Wi-Fi nie są wykonywane.
- Synchronizacje
SyncAdapter
i zadaniaJobScheduler
odroczone do następnego okna konserwacji. - Aplikacje odbierające wiadomości SMS i MMS są umieszczane na tymczasowej białej liście, aby mogły dokończyć przetwarzanie.
Wyjście
Platforma opuszcza urządzenie z trybu Doze, gdy wykryje:
- Interakcja użytkownika z urządzeniem
- Ruch urządzenia
- Ekran urządzenia włącza się
- Nieuchronny alarm budzika
Powiadomienia nie powodują wyjścia urządzenia z trybu Doze.
Android 7.0 i nowsze wersje rozszerzają funkcję Doze, włączając lekki tryb uśpienia przy wyłączonym ekranie, zanim urządzenie przejdzie w stan bezczynności.
Rysunek 1. Tryby drzemki dla urządzeń niestacjonarnych i stacjonarnych.
Działanie | Drzemać | Lekka drzemka |
---|---|---|
Spust | Ekran wyłączony, na baterii, stacjonarny | Ekran wyłączony, na baterii (odłączony) |
wyczucie czasu | Sukcesywnie zwiększające się okresy konserwacji | Powtarzane okresy N-minutowe z oknami konserwacyjnymi |
Ograniczenia | Brak dostępu do sieci, blokady wybudzania lub skanowania GPS/Wi-Fi; alarmy i zadania/synchronizacje odroczone | Brak dostępu do sieci; zadania/synchronizacje odroczone, z wyjątkiem okresów konserwacji |
Zachowanie | Otrzymano tylko powiadomienia push o wysokim priorytecie | Wszystkie otrzymane wiadomości w czasie rzeczywistym (wiadomości błyskawiczne, połączenia itp.); wiadomość powiadamiająca o wysokim priorytecie umożliwia tymczasowy dostęp do sieci |
Wyjście | Ruch, włączony ekran lub alarm budzika | Na ekranie |
Interakcja z trybem gotowości aplikacji
- Czas spędzony w trybie drzemki nie wlicza się do stanu gotowości aplikacji.
- Gdy urządzenie znajduje się w trybie uśpienia, bezczynne aplikacje mogą wykonywać normalne operacje przynajmniej raz dziennie.
Zintegruj drzemkę
Gdy drzemka jest włączona, urządzenia obsługujące SENSOR_TYPE_SIGNIFICANT_MOTION
wykonują pełne optymalizacje drzemki (w tym lekkie optymalizacje); urządzenia bez SMD wykonują tylko lekkie optymalizacje Doze. Android automatycznie wybiera odpowiednie optymalizacje Doze, a konfiguracja dostawcy nie jest konieczna.
Aby włączyć funkcję Doze na urządzeniu:
- Upewnij się, że na urządzeniu zainstalowana jest usługa przesyłania wiadomości w chmurze.
- W pliku konfiguracyjnym nakładki urządzenia
overlay/frameworks/base/core/res/res/values/config.xml
ustawconfig_enableAutoPowerModes
natrue
:<bool name="config_enableAutoPowerModes">true</bool>
W AOSP ten parametr jest domyślnie ustawiony nafalse
(Drzemka wyłączona). - Upewnij się, że wstępnie załadowane aplikacje i usługi:
- Skorzystaj ze wskazówek dotyczących optymalizacji oszczędzania energii . Aby uzyskać szczegółowe informacje, zobacz Testowanie i optymalizacja aplikacji .
LUB
- Są zwolnione z funkcji Doze i App Standby. Aby uzyskać szczegółowe informacje, zobacz Zwolnienie aplikacji .
- Skorzystaj ze wskazówek dotyczących optymalizacji oszczędzania energii . Aby uzyskać szczegółowe informacje, zobacz Testowanie i optymalizacja aplikacji .
- Potwierdź, że niezbędne usługi są wyłączone z funkcji Doze.
Porady
- Jeśli to możliwe, użyj FCM do przesyłania wiadomości dalej .
- Jeśli Twoi użytkownicy muszą natychmiast zobaczyć powiadomienie, użyj wiadomości o wysokim priorytecie FCM .
- Podaj wystarczające informacje w początkowym ładunku wiadomości (aby uniknąć niepotrzebnego późniejszego dostępu do sieci).
- Ustaw krytyczne alarmy za pomocą
setAndAllowWhileIdle()
isetExactAndAllowWhileIdle()
.
Testuj i optymalizuj aplikacje
Przetestuj wszystkie aplikacje (szczególnie te wstępnie załadowane) w trybie drzemki. Szczegółowe informacje można znaleźć w części Testowanie w trybie drzemki i czuwania aplikacji .