Doze Mode is een energiebesparende modus in Android, geïntroduceerd in versie 6.0 Marshmallow, die de achtergrondactiviteit van apps aanzienlijk beperkt wanneer het apparaat inactief is. Het systeem zet apps in een staat van verminderd energieverbruik, waarbij netwerkverzoeken, synchronisatie en JobScheduler worden uitgesteld om de batterijduur te verlengen. Volgens een analyse van Android Developers, 2025, kan Doze Mode de stand-bytijd van het apparaat met 2–3 keer verlengen, afhankelijk van het model en de OS-versie.
Belangrijkste
Doze Mode is een ingebouwd energiebesparend mechanisme in Android dat wordt geactiveerd wanneer het apparaat niet is aangesloten op een oplader, het scherm is uitgeschakeld en de gebruiker gedurende een bepaalde tijd geen interactie heeft met het apparaat. Het doel van Doze is om de achtergrondactiviteit van apps te minimaliseren om de batterijlevensduur in de standby-modus maximaal te verlengen. Het systeem stelt JobScheduler, accountsynchronisatie, AlarmManager en netwerkverzoeken uit.
De modus werd geïntroduceerd in Android 6.0 Marshmallow (API 23) en is aanzienlijk verbeterd in latere versies. In Android 7.0 Nougat verscheen een tweede fase (Light Doze), die wordt geactiveerd bij beweging van het apparaat. Android 8.0 voerde extra beperkingen in voor achtergrondservices die samenwerken met Doze. In Android 12+ werd Doze geïntegreerd met een bijgewerkt batterijbeheersysteem dat het gedrag van de gebruiker analyseert.
Het is belangrijk om te begrijpen: Doze Mode schakelt apps niet volledig uit. Het zet ze in een staat met uitgestelde taken, maar beëindigt geen processen. Foreground Service met een melding blijft werken, pushmeldingen met hoge prioriteit (FCM high-priority) worden bezorgd en alarmen gaan volgens schema af. Doze heeft alleen invloed op achtergrondbewerkingen die de gebruiker op dat moment niet ziet en niet verwacht.
Doze Mode wordt geactiveerd wanneer aan alle voorwaarden is voldaan: het scherm is meer dan 30 minuten uitgeschakeld (eerste activering), het apparaat is stil (versnellingsmeter wordt gebruikt), niet aangesloten op de oplader. Als de gebruiker de telefoon oppakt of de oplader aansluit, wordt Doze onmiddellijk gedeactiveerd. In Android 7+ wordt Light Doze al na 5 minuten inactiviteit geactiveerd, zelfs als het apparaat beweegt.
Doze Mode beheert achtergrondactiviteit via de systeemservice DeviceIdleController, die de status van sensoren, het scherm en de oplader analyseert. Wanneer aan alle activeringsvoorwaarden is voldaan, zet het systeem apps in de wachtstand en groepeert hun verzoeken in onderhoudsvensters. Binnen deze vensters worden alle uitgestelde taken — netwerkoproepen, synchronisatie, AlarmManager — in batches uitgevoerd.
De systeem-PowerManager bepaalt welke apps uit Doze kunnen ontwaken. Pushmeldingen met hoge prioriteit (FCM high-priority) kunnen het apparaat wekken om berichten te bezorgen. Het systeem negeert Doze ook voor apps die door de gebruiker aan de Whitelist voor batterijoptimalisatie zijn toegevoegd. Alle andere apps moeten wachten op het volgende onderhoudsvenster.
De duur van onderhoudsvensters in Deep Doze neemt exponentieel toe: het eerste venster na 1 uur, het tweede na 2 uur, het derde na 4 uur enzovoort tot een maximuminterval van 12 uur. Dit betekent dat hoe langer het apparaat in Doze blijft, hoe minder vaak apps achtergrondtaken kunnen uitvoeren — de batterij wordt maximaal agressief gespaard.
In Doze Mode worden alle netwerkverzoeken opgeschort tot het volgende onderhoudsvenster. De enige uitzonderingen zijn FCM high-priority-berichten (met de tag „high_priority” in de payload) en signalen van AlarmManager met de vlaggen setAndAllowWhileIdle() of setExactAndAllowWhileIdle(). Gewone netwerkoproepen via Retrofit, OkHttp of Volley worden pas uitgevoerd wanneer het venster opent.
Doze Mode bestaat uit twee fasen: Light Doze (lichte slaap) en Deep Doze (diepe slaap). Elke fase heeft zijn eigen beperkingen en verschillende activeringsdrempels. Het begrijpen van het verschil tussen de fasen is essentieel voor een ontwikkelaar die achtergrondtaken ontwerpt die bestand zijn tegen de energiebesparende modus.
Light Doze wordt geactiveerd na 5–30 minuten inactiviteit van het apparaat (scherm uit, geen beweging). In deze fase worden netwerkverzoeken en synchronisatie opgeschort, maar AlarmManager en JobScheduler blijven werken met kleine vertragingen. Apps kunnen uit Light Doze ontwaken bij het ontvangen van een pushmelding of bij aansluiting op de oplader. Light Doze vereist geen volledige stilstand — het apparaat kan bewegen.
Deep Doze treedt op na 60–90 minuten inactiviteit met een stilstaand apparaat (versnellingsmeter registreert geen beweging). In Deep Doze stelt het systeem taken veel agressiever uit: onderhoudsvensters openen minder vaak (met exponentieel toenemend interval), AlarmManager wordt alleen geactiveerd met de vlaggen setAndAllowWhileIdle() en WakeLock werkt niet in de normale modus. Apps die niet op de Whitelist staan, verliezen praktisch alle achtergrondactiviteit.
| Parameter | Light Doze | Deep Doze |
|---|---|---|
| Activeringstijd | 5–30 minuten | 60–90 minuten |
| Bewegingsvereiste | Niet vereist | Stilstand |
| Vensterinterval | 10–60 minuten | 1–12 uur |
| AlarmManager | Werkt met vertragingen | Alleen withAllowWhileIdle |
| Netwerk in vensters | Beschikbaar | Beschikbaar |
Doze Mode legt verschillende categorieën beperkingen op die de ontwikkelaar moet overwegen bij het ontwerpen van de app. Het negeren van deze beperkingen leidt ertoe dat achtergrondtaken niet worden uitgevoerd en de gebruiker ziet dat de app niet correct werkt — geen updates, niet-verzonden berichten, niet-uitgevoerde synchronisatie.
Alle netwerkverzoeken worden geblokkeerd tot het volgende onderhoudsvenster. Dit geldt voor HTTP-aanroepen, WebSocket-verbindingen, bestandsdownloads. Uitzondering — FCM high-priority-berichten die via een apart Google Play Services-kanaal lopen, onafhankelijk van Doze. Voor synchronisatie van kritieke gegevens wordt het gebruik van WorkManager met het beleid NetworkType.CONNECTED aanbevolen.
AlarmManager stelt in Deep Doze alle alarmen uit, behalve die gemaakt met de methoden setAndAllowWhileIdle() en setExactAndAllowWhileIdle(). Zelfs deze methoden hebben echter een beperking — niet meer dan 1 activering per 9 minuten per app. Nauwkeurige alarmen setExact() garanderen in Deep Doze geen activering op het ingestelde tijdstip.
WakeLock werkt in Doze Mode niet-standaard: het systeem behoudt de slaapblokkade niet voor apps buiten de Whitelist. Zelfs als de app correct PARTIAL_WAKE_LOCK heeft verkregen, kan het systeem deze bij het ingaan van Deep Doze gedwongen vrijgeven. De enige manier om de uitvoering van een taak in Doze te garanderen, is het gebruik van Foreground Service met een melding.
Whitelist (witte lijst) Doze is de set apps waaraan het systeem achtergrondactiviteit toestaat in de energiebesparende modus met minimale beperkingen. De gebruiker kan handmatig apps toevoegen via Instellingen → Batterij → Batterijoptimalisatie. Systeemapps, launchers en Google Play Services staan standaard op de Whitelist.
De ontwikkelaar kan toevoeging aan de Whitelist aanvragen via een systeemdialoog met Intent ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Hiervoor is in het manifest de machtiging REQUEST_IGNORE_BATTERY_OPTIMIZATIONS vereist. Google raadt echter af om zonder goede reden een uitzondering aan te vragen — apps die deze mogelijkheid misbruiken, lopen het risico te worden afgewezen bij publicatie in Google Play.
Zonder Whitelist kan de app FCM high-priority gebruiken om het apparaat uit Doze te wekken. Elk dergelijk bericht geeft de app een kort venster (10–30 seconden) om een taak uit te voeren. Voor langere bewerkingen moet de app een Foreground Service starten, die blijft werken in de onderhoudsvensters van Doze. Google biedt ook een vrijstellingsmechanisme voor bepaalde typen apps: navigatie-, medische en berichtenapps.
Om te controleren of de app op de Whitelist voor batterijoptimalisatie staat, wordt de methode powerManager.isIgnoringBatteryOptimizations() gebruikt. Als de methode false retourneert, is de app onderworpen aan alle Doze-beperkingen. Als true — kan de app Wakelock, AlarmManager en netwerk zonder beperkingen gebruiken, zelfs in Deep Doze. Misbruik van dit voorrecht zal echter leiden tot slechte gebruikersbeoordelingen.
Testen van het gedrag van de app in Doze Mode is een verplichte ontwikkelingsfase, omdat Doze achtergrondfuncties kan verstoren. Android biedt opdrachtregeltools via ADB voor het geforceerd overschakelen van het apparaat naar Light Doze en Deep Doze. Testen moet worden uitgevoerd op een fysiek apparaat of emulator met Android 6.0+.
Voor toegang tot Light Doze wordt de opdracht adb shell dumpsys deviceidle step light gebruikt. Voor Deep Doze — adb shell dumpsys deviceidle step deep. De opdracht adb shell dumpsys deviceidle force-idle deep schakelt het apparaat onmiddellijk naar Deep Doze zonder te wachten op de standaard time-out. Na het testen wordt Doze uitgeschakeld met de opdracht adb shell dumpsys deviceidle unforce.
# Geforceerde toegang tot Light Doze
$ adb shell dumpsys deviceidle step light
# Geforceerde toegang tot Deep Doze
$ adb shell dumpsys deviceidle step deep
# Onmiddellijke overgang naar Deep Doze
$ adb shell dumpsys deviceidle force-idle deep
# Uit Doze gaan
$ adb shell dumpsys deviceidle unforce
# Doze-status bekijken
$ adb shell dumpsys deviceidle
Na het overschakelen naar Doze Mode moet worden gecontroleerd: of netwerkverzoeken werken (ze zouden moeten worden uitgesteld), of AlarmManager wordt geactiveerd, of FCM-berichten worden bezorgd, of WorkManager-taken correct worden uitgevoerd. WorkManager blijft werken in Doze: de taken worden uitgevoerd in de onderhoudsvensters. Als een taak echter onmiddellijke uitvoering vereist, moet setExpedited() worden opgegeven of moet Foreground Service worden gebruikt.
Het ontwikkelen van een app die bestand is tegen Doze Mode vereist een heroverweging van de benadering van achtergrondtaken. Google raadt aan de app zo te ontwerpen dat deze correct werkt onder alle Doze-beperkingen, zonder te vertrouwen op onmiddellijke uitvoering van achtergrondbewerkingen. Het fundamentele principe is het gebruik van WorkManager voor alle achtergrondtaken die kunnen worden uitgesteld.
WorkManager is de door Google aanbevolen API voor achtergrondtaken, omdat deze zich automatisch aanpast aan Doze. WorkManager gebruikt JobScheduler (API 23+) of AlarmManager + BroadcastReceiver op oudere versies. WorkManager-taken worden uitgevoerd in het dichtstbijzijnde onderhoudsvenster van Doze en indien nodig — onmiddellijk via Expedited Work (Foreground Service onder de motorkap).
Als een taak niet kan worden uitgesteld (media-afspelen, navigatie, VoIP), gebruik dan Foreground Service met een verplichte melding. Foreground Service krijgt een uitzondering van Doze: het kan WakeLock vasthouden en netwerkverzoeken uitvoeren. Zelfs Foreground Service is echter onderworpen aan het beleid van Deep Doze-onderhoudsvensters voor bepaalde soorten taken — bijvoorbeeld dataSync.
Voor het bezorgen van berichten die onmiddellijke aandacht vereisen (binnenkomend gesprek, dringende melding), gebruik FCM high-priority-berichten. Dergelijke berichten wekken het apparaat uit Doze en geven de app een kort venster voor verwerking. Gebruik high-priority niet voor gewone meldingen — dit leidt tot snelle batterijontlading en kan door Google Play worden beschouwd als een schending van het beleid.
Veelgestelde vragen
Doze Mode is een energiebesparende modus van Android 6+ die de achtergrondactiviteit van apps beperkt wanneer het apparaat niet wordt gebruikt (scherm uit, geen beweging). Het systeem stelt netwerkverzoeken, synchronisatie en JobScheduler uit en groepeert ze in onderhoudsvensters om de batterij te sparen.
Doze Mode heeft twee fasen: Light Doze (lichte slaap) wordt geactiveerd na 5–30 minuten, laat AlarmManager met vertragingen werken. Deep Doze (diepe slaap) treedt op na 60–90 minuten stilstand, beperkt achtergrondtaken agressief met onderhoudsvensters tot 12 uur.
Doze blokkeert netwerkverzoeken, stelt AlarmManager uit (behalve setAndAllowWhileIdle), geeft WakeLock gedwongen vrij en groepeert JobScheduler in onderhoudsvensters. Uitzonderingen — Foreground Service, FCM high-priority en apps op de Whitelist van de gebruiker.
Vraag de machtiging REQUEST_IGNORE_BATTERY_OPTIMIZATIONS aan in het manifest en stuur een Intent met de actie ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Het systeem toont een dialoog aan de gebruiker. Toevoeging aan de Whitelist is een voorrecht dat Google alleen voor kritieke apps aanbeveelt.
Gebruik ADB-opdrachten: adb shell dumpsys deviceidle force-idle deep om Deep Doze in te gaan, adb shell dumpsys deviceidle step light voor Light Doze, adb shell dumpsys deviceidle unforce om te verlaten. Controleer de werking van WorkManager, AlarmManager en FCM in elke modus.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook