A Doze Mode egy Android energiatakarékos mód, amelyet a 6.0 Marshmallow verzióban vezettek be, és jelentősen korlátozza az alkalmazások háttértevékenységét, amikor a készülék inaktív. A rendszer alacsony energiafogyasztású állapotba helyezi az alkalmazásokat, elhalasztva a hálózati kéréseket, szinkronizálást és JobSchedulert az akkumulátor élettartamának meghosszabbítása érdekében. A Android Developers, 2025 elemzése szerint a Doze Mode akár 2–3-szor is megnövelheti a készülék készenléti idejét a modelltől és az OS verziójától függően.
Főbb pontok
A Doze Mode egy beépített energiatakarékos mechanizmus Androidban, amely akkor aktiválódik, amikor a készülék nincs töltőhöz csatlakoztatva, a képernyő ki van kapcsolva és a felhasználó egy bizonyos ideig nem lép kapcsolatba a készülékkel. A Doze célja, hogy minimalizálja az alkalmazások háttértevékenységét, hogy maximalizálja az akkumulátor élettartamát készenléti módban. A rendszer elhalasztja a JobSchedulert, a fiókok szinkronizálását, az AlarmManagert és a hálózati kéréseket.
A módot Android 6.0 Marshmallow (API 23) ban vezették be, és jelentősen továbbfejlesztették a későbbi verziókban. Az Android 7.0 Nougat-ban megjelent a második fázis (Light Doze), amely a készülék mozgásakor aktiválódik. Az Android 8.0 további korlátozásokat vezetett be a Doze-zsal együtt működő háttérszolgáltatásokra. Az Android 12+-ban a Doze integrálásra került a frissített akkumulátorkezelő rendszerrel, amely elemzi a felhasználó viselkedését.
Fontos megérteni: a Doze Mode nem kapcsolja ki teljesen az alkalmazásokat. Elhalasztott feladatokkal rendelkező állapotba helyezi őket, de nem öli meg a folyamatokat. A Foreground Service értesítéssel tovább működik, a magas prioritású push értesítések (FCM high-priority) kézbesítésre kerülnek, és az ébresztések menetrend szerint aktiválódnak. A Doze csak azokat a háttérműveleteket érinti, amelyeket a felhasználó jelenleg nem lát és nem vár.
A Doze Mode akkor aktiválódik, ha minden feltétel teljesül: a képernyő több mint 30 perce ki van kapcsolva (első aktiválás), a készülék mozdulatlan (gyorsulásmérőt használ), nincs töltőhöz csatlakoztatva. Ha a felhasználó kézbe veszi a telefont vagy csatlakoztatja a töltőt, a Doze azonnal deaktiválódik. Android 7+-ban a Light Doze már 5 perc inaktivitás után aktiválódik, még a készülék mozgása esetén is.
A Doze Mode a DeviceIdleController rendszerszolgáltatáson keresztül kezeli a háttértevékenységet, amely elemzi az érzékelők, a képernyő és a töltő állapotát. Amikor minden aktiválási feltétel teljesül, a rendszer várakozó állapotba helyezi az alkalmazásokat, és kéréseiket szolgáltatási ablakokba csoportosítja. Ezekben az ablakokban az összes elhalasztott feladat — hálózati hívások, szinkronizálás, AlarmManager — kötegesen kerül végrehajtásra.
A rendszer PowerManager je szabályozza, hogy mely alkalmazások léphetnek ki a Doze-ból. A magas prioritású push értesítések (FCM high-priority) felébreszthetik a készüléket az üzenet kézbesítéséhez. A rendszer figyelmen kívül hagyja a Doze-t a felhasználó által az akkumulátor-optimalizálás Whitelist jéhez adott alkalmazások esetében. Az összes többi alkalmazásnak meg kell várnia a következő szolgáltatási ablakot.
A szolgáltatási ablakok időtartama Deep Doze-ban exponenciálisan növekszik: az első ablak 1 óra után, a második 2 óra után, a harmadik 4 óra után és így tovább, egészen a 12 órás maximális intervallumig. Ez azt jelenti, hogy minél tovább marad a készülék Doze-ban, annál ritkábban hajthatnak végre az alkalmazások háttérfeladatokat — az akkumulátor maximálisan agresszívan kímélődik.
Doze Mode-ban az összes hálózati kérés felfüggesztésre kerül a szolgáltatási ablak megérkezéséig. Kivételt csak a FCM high-priority üzenetek (a payload-ban „high_priority” címkével) és az AlarmManager setAndAllowWhileIdle() vagy setExactAndAllowWhileIdle() jelzőkkel rendelkező jelei képeznek. A szokásos hálózati hívások Retrofit, OkHttp vagy Volley segítségével nem kerülnek végrehajtásra az ablak megnyílásáig.
A Doze Mode két fázisból áll: Light Doze (könnyű alvás) és Deep Doze (mély alvás). Minden fázis saját korlátozásokat alkalmaz, és eltérő aktiválási küszöbértékekkel rendelkezik. A fázisok közötti különbség megértése alapvető fontosságú az energiatakarékos módnak ellenálló háttérfeladatokat tervező fejlesztő számára.
A Light Doze a készülék 5–30 perces inaktivitása után aktiválódik (képernyő kikapcsolva, nincs mozgás). Ebben a fázisban a hálózati kérések és a szinkronizálás felfüggesztésre kerül, de az AlarmManager és a JobScheduler kisebb késésekkel tovább működik. Az alkalmazások kiléphetnek a Light Doze-ból push értesítés fogadásakor vagy a töltő csatlakoztatásakor. A Light Doze nem igényel teljes mozdulatlanságot — a készülék mozoghat.
A Deep Doze 60–90 perc inaktivitás után következik be mozdulatlan készülék mellett (a gyorsulásmérő nem érzékel mozgást). Deep Doze-ban a rendszer sokkal agresszívebben halasztja el a feladatokat: a szolgáltatási ablakok ritkábban nyílnak meg (exponenciálisan növekvő intervallummal), az AlarmManager csak a setAndAllowWhileIdle() jelzőkkel aktiválódik, és a WakeLock nem működik normál módban. A Whitelist-en kívüli alkalmazások gyakorlatilag teljesen elveszítik a háttértevékenységet.
| Paraméter | Light Doze | Deep Doze |
|---|---|---|
| Aktiválási idő | 5–30 perc | 60–90 perc |
| Mozgás követelmény | Nem szükséges | Mozdulatlanság |
| Ablak intervallum | 10–60 perc | 1–12 óra |
| AlarmManager | Késésekkel működik | Csak withAllowWhileIdle |
| Hálózat az ablakokban | Elérhető | Elérhető |
A Doze Mode több kategóriájú korlátozást alkalmaz, amelyeket a fejlesztőnek figyelembe kell vennie az alkalmazás tervezésekor. E korlátozások figyelmen kívül hagyása ahhoz vezet, hogy a háttérfeladatok nem hajtódnak végre, és a felhasználó az alkalmazás helytelen működését tapasztalja — frissítések hiánya, el nem küldött üzenetek, el nem végzett szinkronizálás.
Minden hálózati kérés blokkolva van a szolgáltatási ablak megérkezéséig. Ez vonatkozik a HTTP-hívásokra, WebSocket-kapcsolatokra, fájlletöltésekre. Kivételt képeznek az FCM high-priority üzenetek, amelyek egy külön Google Play Services csatornán haladnak át, függetlenül a Doze-tól. Kritikus adatok szinkronizálásához a WorkManager használata javasolt NetworkType.CONNECTED politikával.
Az AlarmManager Deep Doze-ban az összes ébresztést elhalasztja, kivéve a setAndAllowWhileIdle() és setExactAndAllowWhileIdle() metódusokkal létrehozottakat. Azonban még ezeknek a metódusoknak is van korlátozása — legfeljebb 1 aktiválás 9 percenként alkalmazásonként. A pontos ébresztések setExact() Deep Doze-ban nem garantálják az aktiválást a megadott időben.
A WakeLock Doze Mode-ban nem szabványos módon működik: a rendszer nem tartja fenn az alvási zárolást a Whitelisten kívüli alkalmazások számára. Még ha az alkalmazás helyesen is szerezte meg a PARTIAL_WAKE_LOCK-ot, a Deep Doze bekövetkeztekor a rendszer erőszakosan felszabadíthatja azt. Az egyetlen mód a feladat végrehajtásának garantálására Doze-ban a Foreground Service használata értesítéssel.
A Whitelist (fehér lista) Doze azon alkalmazások halmaza, amelyeknek a rendszer engedélyezi a háttértevékenységet energiatakarékos módban minimális korlátozásokkal. A felhasználó manuálisan adhat hozzá alkalmazásokat a Beállítások → Akkumulátor → Akkumulátor-optimalizálás menüpontban. A rendszeralkalmazások, indítók és a Google Play Services alapértelmezés szerint a Whitelisten vannak.
A fejlesztő kérheti a Whitelisthez való hozzáadást egy rendszerpárbeszédablakon keresztül az ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent segítségével. Ehhez a manifesztumban szükség van a REQUEST_IGNORE_BATTERY_OPTIMIZATIONS engedélyre. A Google azonban nem javasolja kivétel kérését alapos ok nélkül — az ezt a lehetőséget visszaélő alkalmazások kockáztatják, hogy elutasítják őket a Google Play ben való közzétételkor.
Whitelist nélkül az alkalmazás használhatja a FCM high-priority t a készülék Doze-ból való felébresztésére. Minden ilyen üzenet rövid ablakot (10–30 másodperc) ad az alkalmazásnak a feladat végrehajtására. Hosszabb műveletekhez az alkalmazásnak el kell indítania egy Foreground Service-t, amely tovább működik a Doze szolgáltatási ablakaiban. A Google biztosít mentességi mechanizmust bizonyos alkalmazástípusok számára is: navigációs, orvosi, üzenetküldő alkalmazások.
Annak ellenőrzéséhez, hogy az alkalmazás az akkumulátor-optimalizálás Whitelist jén van-e, a powerManager.isIgnoringBatteryOptimizations() metódust használjuk. Ha a metódus false értéket ad vissza, az alkalmazás a Doze összes korlátozása alá esik. Ha true — az alkalmazás korlátozások nélkül használhatja a Wakelockot, AlarmManagert és hálózatot még Deep Doze-ban is. Ennek a kiváltságnak a visszaélése azonban rossz felhasználói értékelésekhez vezet.
A tesztelés az alkalmazás Doze Mode-ban való viselkedésének ellenőrzése kötelező fejlesztési szakasz, mivel a Doze megzavarhatja a háttérfunkciókat. Az Android parancssori eszközöket biztosít ADB-n keresztül a készülék kényszerített átkapcsolásához Light Doze-ba és Deep Doze-ba. A tesztelést fizikai eszközön vagy Android 6.0+ emulátoron kell végezni.
A Light Doze ba való belépéshez az adb shell dumpsys deviceidle step light parancsot használjuk. Deep Doze-hoz — adb shell dumpsys deviceidle step deep. Az adb shell dumpsys deviceidle force-idle deep parancs azonnal átkapcsolja a készüléket Deep Doze-ba anélkül, hogy megvárná a szokásos időtúllépést. Tesztelés után a Doze az adb shell dumpsys deviceidle unforce paranccsal kapcsolható ki.
# Kényszerített belépés Light Doze-ba
$ adb shell dumpsys deviceidle step light
# Kényszerített belépés Deep Doze-ba
$ adb shell dumpsys deviceidle step deep
# Azonnali átmenet Deep Doze-ba
$ adb shell dumpsys deviceidle force-idle deep
# Kilépés Doze-ból
$ adb shell dumpsys deviceidle unforce
# Doze állapotának megtekintése
$ adb shell dumpsys deviceidle
A Doze Mode-ba való átkapcsolás után ellenőrizni kell: működnek-e a hálózati kérések (el kell lennie halasztva), aktiválódik-e az AlarmManager, kézbesítésre kerülnek-e az FCM-üzenetek, helyesen hajtódnak-e végre a WorkManager feladatok. A WorkManager Doze-ban tovább működik: feladatai a szolgáltatási ablakokban hajtódnak végre. Ha azonban a feladat azonnali végrehajtást igényel, meg kell adni a setExpedited() t vagy Foreground Service-t kell használni.
A Doze Mode nak ellenálló alkalmazás fejlesztése megköveteli a háttérfeladatokhoz való hozzáállás újragondolását. A Google azt javasolja, hogy az alkalmazást úgy tervezzük, hogy a Doze bármilyen korlátozása mellett helyesen működjön, anélkül, hogy a háttérműveletek azonnali végrehajtására támaszkodna. Az alapelv — a WorkManager használata minden olyan háttérfeladathoz, amely elhalasztható.
A WorkManager a Google által ajánlott API háttérfeladatokhoz, mivel automatikusan alkalmazkodik a Doze-hoz. A WorkManager a JobSchedulert (API 23+) vagy régebbi verziókon az AlarmManager + BroadcastReceivert használja. A WorkManager feladatok a legközelebbi Doze szolgáltatási ablakban hajtódnak végre, szükség esetén pedig azonnal a Expedited Work (Foreground Service a motorháztető alatt) segítségével.
Ha a feladat nem halasztható el (média lejátszása, navigáció, VoIP), használjon Foreground Service t kötelező értesítéssel. A Foreground Service mentességet kap a Doze alól: megtarthatja a WakeLockot és végrehajthat hálózati kéréseket. Azonban még a Foreground Service is alá van vetve a Deep Doze szolgáltatási ablakok politikájának bizonyos feladattípusok esetében — például dataSync.
Azonnali figyelmet igénylő üzenetek kézbesítéséhez (bejövő hívás, sürgős értesítés) használjon FCM high-priority üzeneteket. Az ilyen üzenetek felébresztik a készüléket Doze-ból, és rövid ablakot adnak az alkalmazásnak a feldolgozásra. Ne használja a high-priority t szokásos értesítésekhez — ez az akkumulátor gyors lemerüléséhez vezet, és a Google Play a szabályzat megsértésének tekintheti.
Gyakran Ismételt Kérdések
A Doze Mode egy Android 6+ energiatakarékos mód, amely korlátozza az alkalmazások háttértevékenységét, amikor a készülék nincs használatban (képernyő ki, nincs mozgás). A rendszer elhalasztja a hálózati kéréseket, szinkronizálást és JobSchedulert, csoportosítva azokat szolgáltatási ablakokba az akkumulátor kímélése érdekében.
A Doze Mode nak két fázisa van: Light Doze (könnyű alvás) 5–30 perc után aktiválódik, lehetővé teszi az AlarmManager késleltetett működését. Deep Doze (mély alvás) 60–90 perc mozdulatlanság után következik be, agresszívan korlátozva a háttérfeladatokat akár 12 órás szolgáltatási ablakokkal.
A Doze blokkolja a hálózati kéréseket, elhalasztja az AlarmManagert (kivéve setAndAllowWhileIdle), erőszakosan felszabadítja a WakeLockot és csoportosítja a JobSchedulert szolgáltatási ablakokba. Kivétel — Foreground Service, FCM high-priority és a felhasználó Whitelist alkalmazásai.
Kérje a REQUEST_IGNORE_BATTERY_OPTIMIZATIONS engedélyt a manifesztumban, és küldjön egy Intentet az ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS művelettel. A rendszer párbeszédablakot jelenít meg a felhasználónak. A Whitelist hez való hozzáadás egy kiváltság, amelyet a Google csak kritikus fontosságú alkalmazásoknak javasol.
Használjon ADB parancsokat: adb shell dumpsys deviceidle force-idle deep a Deep Doze-ba lépéshez, adb shell dumpsys deviceidle step light Light Doze-hoz, adb shell dumpsys deviceidle unforce a kilépéshez. Ellenőrizze a WorkManager, AlarmManager és FCM működését minden módban.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is