Doze Mode to tryb oszczędzania energii w Androidzie, wprowadzony w wersji 6.0 Marshmallow, który znacząco ogranicza aktywność aplikacji w tle, gdy urządzenie jest bezczynne. System przełącza aplikacje w stan obniżonego poboru energii, opóźniając żądania sieciowe, synchronizację i JobScheduler, aby wydłużyć czas pracy na baterii. Według analizy Android Developers, 2025, Doze Mode pozwala zwiększyć czas czuwania urządzenia 2–3 razy w zależności od modelu i wersji systemu.
Najważniejsze
Doze Mode to wbudowany mechanizm oszczędzania energii w Androidzie, aktywujący się, gdy urządzenie nie jest podłączone do ładowarki, ekran jest wyłączony, a użytkownik nie korzysta z urządzenia przez określony czas. Celem Doze jest zminimalizowanie aktywności aplikacji w tle, aby maksymalnie wydłużyć żywotność baterii w trybie czuwania. System opóźnia JobScheduler, synchronizację kont, AlarmManager i żądania sieciowe.
Tryb został wprowadzony w Android 6.0 Marshmallow (API 23) i znacząco rozbudowany w kolejnych wersjach. W Android 7.0 Nougat pojawiła się druga faza (Light Doze), aktywująca się podczas ruchu urządzenia. Android 8.0 wprowadził dodatkowe ograniczenia na usługi działające w tle, współpracujące z Doze. W Android 12+ Doze został zintegrowany ze zaktualizowanym systemem zarządzania baterią, analizującym zachowanie użytkownika.
Ważne jest, aby zrozumieć: Doze Mode nie wyłącza aplikacji całkowicie. Przełącza je w stan z odroczonymi zadaniami, ale nie zabija procesów. Foreground Service z powiadomieniem nadal działa, powiadomienia push wysokiego priorytetu (FCM high-priority) są dostarczane, a alarmy uruchamiają się zgodnie z harmonogramem. Doze wpływa tylko na operacje w tle, których użytkownik nie widzi i nie oczekuje w danym momencie.
Doze Mode aktywuje się po spełnieniu wszystkich warunków: ekran wyłączony przez ponad 30 minut (pierwsza aktywacja), urządzenie nieruchome (wykorzystywany jest akcelerometr), niepodłączone do ładowarki. Jeśli użytkownik weźmie telefon do ręki lub podłączy ładowarkę, Doze natychmiast się dezaktywuje. W Android 7+ Light Doze aktywuje się już po 5 minutach bezczynności, nawet podczas ruchu urządzenia.
Doze Mode zarządza aktywnością w tle poprzez systemowy serwis DeviceIdleController, który analizuje stan czujników, ekranu i ładowarki. Po spełnieniu wszystkich warunków aktywacji system przełącza aplikacje w tryb oczekiwania, grupując ich żądania w okna serwisowe. Wewnątrz tych okien wszystkie odroczone zadania — wywołania sieciowe, synchronizacja, AlarmManager — są wykonywane partiami.
Systemowy PowerManager kontroluje, które aplikacje mogą wybudzać się z Doze. Powiadomienia push wysokiego priorytetu (FCM high-priority) mogą obudzić urządzenie w celu dostarczenia wiadomości. System ignoruje również Doze dla aplikacji dodanych przez użytkownika do Whitelist optymalizacji baterii. Wszystkie pozostałe aplikacje muszą czekać na następne okno serwisowe.
Czas trwania okien serwisowych w Deep Doze zwiększa się wykładniczo: pierwsze okno po 1 godzinie, drugie po 2 godzinach, trzecie po 4 godzinach i tak dalej, aż do maksymalnego interwału wynoszącego 12 godzin. Oznacza to, że im dłużej urządzenie znajduje się w Doze, tym rzadziej aplikacje mogą wykonywać zadania w tle — bateria jest oszczędzana maksymalnie agresywnie.
W Doze Mode wszystkie żądania sieciowe są wstrzymywane do nadejścia okna serwisowego. Wyjątek stanowią tylko FCM high-priority messages (z tagiem „high_priority” w payload) i sygnały z AlarmManager z flagami setAndAllowWhileIdle() lub setExactAndAllowWhileIdle(). Zwykłe wywołania sieciowe przez Retrofit, OkHttp lub Volley nie zostaną wykonane, dopóki nie otworzy się okno.
Doze Mode składa się z dwóch faz: Light Doze (lekki sen) i Deep Doze (głęboki sen). Każda faza nakłada własne ograniczenia i ma różne progi aktywacji. Zrozumienie różnicy między fazami jest kluczowe dla programisty projektującego zadania w tle odporne na tryb oszczędzania energii.
Light Doze aktywuje się po 5–30 minutach bezczynności urządzenia (ekran wyłączony, brak ruchu). W tej fazie żądania sieciowe i synchronizacja są wstrzymywane, ale AlarmManager i JobScheduler nadal działają z niewielkimi opóźnieniami. Aplikacje mogą wybudzić się z Light Doze po otrzymaniu powiadomienia push lub po podłączeniu do ładowarki. Light Doze nie wymaga całkowitego bezruchu — urządzenie może się poruszać.
Deep Doze następuje po 60–90 minutach bezczynności przy nieruchomym urządzeniu (akcelerometr nie rejestruje ruchu). W Deep Doze system znacznie agresywniej opóźnia zadania: okna serwisowe otwierają się rzadziej (z wykładniczym wzrostem interwału), AlarmManager uruchamia się tylko z flagami setAndAllowWhileIdle(), a WakeLock nie działa w standardowym trybie. Aplikacje nieznajdujące się na Whitelist praktycznie całkowicie tracą możliwość działania w tle.
| Parametr | Light Doze | Deep Doze |
|---|---|---|
| Czas aktywacji | 5–30 minut | 60–90 minut |
| Wymóg ruchu | Niewymagany | Bezruch |
| Interwał okien | 10–60 minut | 1–12 godzin |
| AlarmManager | Działa z opóźnieniami | Tylko withAllowWhileIdle |
| Sieć w oknach | Dostępna | Dostępna |
Doze Mode nakłada kilka kategorii ograniczeń, które programista musi uwzględnić przy projektowaniu aplikacji. Ignorowanie tych ograniczeń prowadzi do tego, że zadania w tle nie są wykonywane, a użytkownik widzi nieprawidłowe działanie aplikacji — brak aktualizacji, niewysłane wiadomości, niezrealizowaną synchronizację.
Wszystkie żądania sieciowe są blokowane do nadejścia okna serwisowego. Dotyczy to wywołań HTTP, połączeń WebSocket, pobierania plików. Wyjątkiem są wiadomości FCM high-priority, które przechodzą przez oddzielny kanał Google Play Services, niezależny od Doze. Do synchronizacji krytycznych danych zaleca się używanie WorkManager z polityką NetworkType.CONNECTED.
AlarmManager w Deep Doze opóźnia wszystkie alarmy z wyjątkiem tych utworzonych metodami setAndAllowWhileIdle() i setExactAndAllowWhileIdle(). Jednak nawet te metody mają ograniczenie — nie więcej niż 1 wyzwolenie na 9 minut na aplikację. Dokładne alarmy setExact() w Deep Doze nie gwarantują wyzwolenia o określonej porze.
WakeLock w Doze Mode działa niestandardowo: system nie utrzymuje blokady snu dla aplikacji spoza Whitelist. Nawet jeśli aplikacja poprawnie przechwyciła PARTIAL_WAKE_LOCK, po nadejściu Deep Doze system może go siłą zwolnić. Jedynym sposobem na zagwarantowanie wykonania zadania w Doze jest użycie Foreground Service z powiadomieniem.
Whitelist (biała lista) Doze to zestaw aplikacji, którym system zezwala na aktywność w tle w trybie oszczędzania energii z minimalnymi ograniczeniami. Użytkownik może ręcznie dodawać aplikacje do listy przez Ustawienia → Bateria → Optymalizacja baterii. Aplikacje systemowe, programy uruchamiające i usługi Google Play Services znajdują się na Whitelist domyślnie.
Programista może poprosić o dodanie do Whitelist za pomocą systemowego dialogu z Intent ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. W tym celu w manifeście wymagane jest uprawnienie REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Google nie zaleca jednak proszenia o wyjątek bez ważnego powodu — aplikacje nadużywające tej możliwości ryzykują odrzucenie przy publikacji w Google Play.
Bez Whitelist aplikacja może używać FCM high-priority do wybudzania urządzenia z Doze. Każda taka wiadomość daje aplikacji krótkie okno (10–30 sekund) na wykonanie zadania. W przypadku dłuższych operacji aplikacja powinna uruchomić Foreground Service, który będzie kontynuował działanie w oknach serwisowych Doze. Google udostępnia również mechanizm zwolnienia dla niektórych typów aplikacji: nawigacyjnych, medycznych, komunikatorów.
Aby sprawdzić, czy aplikacja znajduje się na Whitelist optymalizacji baterii, używa się metody powerManager.isIgnoringBatteryOptimizations(). Jeśli metoda zwraca false, aplikacja podlega wszystkim ograniczeniom Doze. Jeśli true — aplikacja może korzystać z Wakelock, AlarmManager i sieci bez ograniczeń nawet w Deep Doze. Nadużywanie tego przywileju doprowadzi jednak do złych opinii użytkowników.
Testowanie zachowania aplikacji w Doze Mode to obowiązkowy etap rozwoju, ponieważ Doze może zakłócić działanie funkcji w tle. Android udostępnia narzędzia wiersza poleceń przez ADB do wymuszonego przełączania urządzenia w Light Doze i Deep Doze. Testowanie należy przeprowadzać na fizycznym urządzeniu lub emulatorze z Android 6.0+.
Aby wejść w Light Doze, używa się komendy adb shell dumpsys deviceidle step light. Dla Deep Doze — adb shell dumpsys deviceidle step deep. Komenda adb shell dumpsys deviceidle force-idle deep natychmiast przełącza urządzenie w Deep Doze bez oczekiwania na standardowy timeout. Po testowaniu Doze wyłącza się komendą adb shell dumpsys deviceidle unforce.
# Wymuszone wejście w Light Doze
$ adb shell dumpsys deviceidle step light
# Wymuszone wejście w Deep Doze
$ adb shell dumpsys deviceidle step deep
# Natychmiastowe przejście w Deep Doze
$ adb shell dumpsys deviceidle force-idle deep
# Wyjście z Doze
$ adb shell dumpsys deviceidle unforce
# Sprawdzenie statusu Doze
$ adb shell dumpsys deviceidle
Po przełączeniu w Doze Mode należy sprawdzić: czy działają żądania sieciowe (powinny być odroczone), czy uruchamia się AlarmManager, czy dostarczane są wiadomości FCM, czy zadania WorkManager są wykonywane prawidłowo. WorkManager w Doze nadal działa: jego zadania są wykonywane w oknach serwisowych. Jeśli jednak zadanie wymaga natychmiastowego wykonania, należy podać setExpedited() lub użyć Foreground Service.
Tworzenie aplikacji odpornej na Doze Mode wymaga zmiany podejścia do zadań w tle. Google zaleca projektowanie aplikacji tak, aby działała poprawnie przy dowolnych ograniczeniach Doze, nie polegając na natychmiastowym wykonywaniu operacji w tle. Podstawową zasadą jest używanie WorkManager do wszystkich zadań w tle, które mogą być odroczone.
WorkManager to zalecany przez Google API do zadań w tle, ponieważ automatycznie dostosowuje się do Doze. WorkManager używa JobScheduler (API 23+) lub AlarmManager + BroadcastReceiver w starszych wersjach. Zadania WorkManager są wykonywane w najbliższym oknie serwisowym Doze, a w razie potrzeby — natychmiast przez Expedited Work (Foreground Service pod maską).
Jeśli zadanie nie może być odroczone (odtwarzanie multimediów, nawigacja, VoIP), użyj Foreground Service z obowiązkowym powiadomieniem. Foreground Service otrzymuje wyjątek z Doze: może utrzymywać WakeLock i wykonywać żądania sieciowe. Jednak nawet Foreground Service podlega polityce okien serwisowych Deep Doze dla niektórych typów zadań — na przykład dataSync.
Aby dostarczyć wiadomości wymagające natychmiastowej uwagi (połączenie przychodzące, pilne powiadomienie), używaj wiadomości FCM high-priority. Takie wiadomości wybudzają urządzenie z Doze i dają aplikacji krótkie okno na przetworzenie. Nie używaj high-priority do zwykłych powiadomień — doprowadzi to do szybkiego rozładowania baterii i może zostać uznane przez Google Play za naruszenie polityki.
Często zadawane pytania
Doze Mode to tryb oszczędzania energii Android 6+, który ogranicza aktywność aplikacji w tle, gdy urządzenie nie jest używane (ekran wyłączony, brak ruchu). System opóźnia żądania sieciowe, synchronizację i JobScheduler, grupując je w okna serwisowe w celu oszczędzania baterii.
Doze Mode ma dwie fazy: Light Doze (lekki sen) aktywuje się po 5–30 minutach, dopuszcza działanie AlarmManager z opóźnieniami. Deep Doze (głęboki sen) następuje po 60–90 minutach bezruchu, agresywnie ogranicza zadania w tle z oknami serwisowymi do 12 godzin.
Doze blokuje żądania sieciowe, opóźnia AlarmManager (z wyjątkiem setAndAllowWhileIdle), siłowo zwalnia WakeLock i grupuje JobScheduler w okna serwisowe. Wyjątkiem są Foreground Service, FCM high-priority i aplikacje z Whitelist użytkownika.
Poproś o uprawnienie REQUEST_IGNORE_BATTERY_OPTIMIZATIONS w manifeście i wyślij Intent z akcją ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. System wyświetli użytkownikowi dialog. Dodanie do Whitelist to przywilej, który Google zaleca używać tylko w krytycznie ważnych aplikacjach.
Używaj komend ADB: adb shell dumpsys deviceidle force-idle deep do wejścia w Deep Doze, adb shell dumpsys deviceidle step light dla Light Doze, adb shell dumpsys deviceidle unforce do wyjścia. Sprawdź działanie WorkManager, AlarmManager i FCM w każdym trybie.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również