Doze Mode este un mod de economisire a energiei în Android, introdus în versiunea 6.0 Marshmallow, care limitează semnificativ activitatea de fundal a aplicațiilor atunci când dispozitivul este inactiv. Sistemul trece aplicațiile într-o stare de consum redus de energie, amânând cererile de rețea, sincronizarea și JobScheduler pentru a prelungi durata de funcționare a bateriei. Conform analizei Android Developers, 2025, Doze Mode permite creșterea timpului de așteptare al dispozitivului de 2–3 ori în funcție de model și versiunea sistemului de operare.
Principalele
Doze Mode este un mecanism încorporat de economisire a energiei în Android, care se activează atunci când dispozitivul nu este conectat la încărcător, ecranul este oprit și utilizatorul nu interacționează cu dispozitivul pentru o anumită perioadă de timp. Scopul Doze este de a minimiza activitatea de fundal a aplicațiilor pentru a prelungi la maximum durata de viață a bateriei în modul de așteptare. Sistemul amână JobScheduler, sincronizarea conturilor, AlarmManager și cererile de rețea.
Modul a fost introdus în Android 6.0 Marshmallow (API 23) și a fost îmbunătățit semnificativ în versiunile ulterioare. În Android 7.0 Nougat a apărut a doua fază (Light Doze), care se activează la mișcarea dispozitivului. Android 8.0 a introdus restricții suplimentare asupra serviciilor de fundal care funcționează împreună cu Doze. În Android 12+, Doze a fost integrat cu sistemul actualizat de gestionare a bateriei, care analizează comportamentul utilizatorului.
Este important de înțeles: Doze Mode nu dezactivează complet aplicațiile. Le trece într-o stare cu sarcini amânate, dar nu ucide procesele. Foreground Service cu notificare continuă să funcționeze, notificările push de înaltă prioritate (FCM high-priority) sunt livrate, iar alarmele se declanșează conform programului. Doze afectează numai operațiunile de fundal pe care utilizatorul nu le vede și nu le așteaptă în acel moment.
Doze Mode se activează când sunt îndeplinite toate condițiile: ecranul este oprit de peste 30 de minute (prima activare), dispozitivul este nemișcat (se folosește accelerometrul), nu este conectat la încărcător. Dacă utilizatorul ia telefonul în mână sau conectează încărcătorul, Doze se dezactivează imediat. În Android 7+, Light Doze se activează după 5 minute de inactivitate, chiar și în timpul mișcării dispozitivului.
Doze Mode gestionează activitatea de fundal prin serviciul de sistem DeviceIdleController, care analizează starea senzorilor, a ecranului și a încărcătorului. Când toate condițiile de activare sunt îndeplinite, sistemul trece aplicațiile în modul de așteptare, grupând cererile lor în ferestre de serviciu. În interiorul acestor ferestre, toate sarcinile amânate — apelurile de rețea, sincronizarea, AlarmManager — sunt executate în loturi.
PowerManager de sistem controlează care aplicații pot ieși din Doze. Notificările push de înaltă prioritate (FCM high-priority) pot trezi dispozitivul pentru livrarea mesajelor. Sistemul ignoră, de asemenea, Doze pentru aplicațiile adăugate de utilizator în Whitelist de optimizare a bateriei. Toate celelalte aplicații trebuie să aștepte următoarea fereastră de serviciu.
Durata ferestrelor de serviciu în Deep Doze crește exponențial: prima fereastră după 1 oră, a doua după 2 ore, a treia după 4 ore și așa mai departe până la intervalul maxim de 12 ore. Aceasta înseamnă că, cu cât dispozitivul rămâne mai mult în Doze, cu atât aplicațiile pot executa mai rar sarcini de fundal — bateria este economisită cât mai agresiv posibil.
În Doze Mode, toate cererile de rețea sunt suspendate până la sosirea ferestrei de serviciu. Excepție fac doar mesajele FCM high-priority (cu eticheta „high_priority” în payload) și semnalele de la AlarmManager cu indicatorii setAndAllowWhileIdle() sau setExactAndAllowWhileIdle(). Apelurile obișnuite de rețea prin Retrofit, OkHttp sau Volley nu vor fi executate până la deschiderea ferestrei.
Doze Mode constă din două faze: Light Doze (somn ușor) și Deep Doze (somn profund). Fiecare fază își aplică propriile restricții și are diferite praguri de activare. Înțelegerea diferenței dintre faze este esențială pentru dezvoltatorul care proiectează sarcini de fundal rezistente la modul de economisire a energiei.
Light Doze se activează după 5–30 de minute de inactivitate a dispozitivului (ecran oprit, fără mișcare). În această fază, cererile de rețea și sincronizarea sunt suspendate, dar AlarmManager și JobScheduler continuă să funcționeze cu întârzieri minore. Aplicațiile pot ieși din Light Doze la primirea unei notificări push sau la conectarea la încărcător. Light Doze nu necesită imobilitate completă — dispozitivul se poate mișca.
Deep Doze survine după 60–90 de minute de inactivitate cu dispozitivul nemișcat (accelerometrul nu înregistrează mișcare). În Deep Doze, sistemul amână sarcinile mult mai agresiv: ferestrele de serviciu se deschid mai rar (cu creștere exponențială a intervalului), AlarmManager se declanșează numai cu indicatorii setAndAllowWhileIdle(), iar WakeLock nu funcționează în mod normal. Aplicațiile care nu se află în Whitelist pierd practic complet activitatea de fundal.
| Parametru | Light Doze | Deep Doze |
|---|---|---|
| Timp de activare | 5–30 minute | 60–90 minute |
| Cerință de mișcare | Nu este necesară | Imobilitate |
| Interval ferestre | 10–60 minute | 1–12 ore |
| AlarmManager | Funcționează cu întârzieri | Doar withAllowWhileIdle |
| Rețea în ferestre | Disponibilă | Disponibilă |
Doze Mode impune mai multe categorii de restricții pe care dezvoltatorul trebuie să le ia în considerare la proiectarea aplicației. Ignorarea acestor restricții duce la neexecutarea sarcinilor de fundal, iar utilizatorul vede o funcționare incorectă a aplicației — lipsa actualizărilor, mesaje netrimise, sincronizare neefectuată.
Toate cererile de rețea sunt blocate până la sosirea ferestrei de serviciu. Aceasta include apelurile HTTP, conexiunile WebSocket, descărcarea fișierelor. Excepție — mesajele FCM high-priority, care trec printr-un canal separat Google Play Services, independent de Doze. Pentru sincronizarea datelor critice, se recomandă utilizarea WorkManager cu politica NetworkType.CONNECTED.
AlarmManager în Deep Doze amână toate alarmele, cu excepția celor create prin metodele setAndAllowWhileIdle() și setExactAndAllowWhileIdle(). Cu toate acestea, chiar și aceste metode au o limitare — nu mai mult de 1 declanșare la 9 minute per aplicație. Alarmele exacte setExact() în Deep Doze nu garantează declanșarea la ora stabilită.
WakeLock în Doze Mode funcționează nestandard: sistemul nu menține blocarea de repaus pentru aplicațiile din afara Whitelist. Chiar dacă aplicația a captat corect PARTIAL_WAKE_LOCK, la intrarea în Deep Doze sistemul poate elibera forțat blocarea. Singura modalitate de a garanta executarea sarcinii în Doze este utilizarea Foreground Service cu notificare.
Whitelist (lista albă) Doze este setul de aplicații cărora sistemul le permite activitatea de fundal în modul de economisire a energiei cu restricții minime. Utilizatorul poate adăuga manual aplicații în listă prin Setări → Baterie → Optimizare baterie. Aplicațiile de sistem, lansatoarele și serviciile Google Play Services se află în Whitelist în mod implicit.
Dezvoltatorul poate solicita adăugarea în Whitelist prin dialogul de sistem cu Intent ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Pentru aceasta, în manifest este necesară permisiunea REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Cu toate acestea, Google nu recomandă solicitarea excepției fără un motiv întemeiat — aplicațiile care abuzează de această posibilitate riscă să fie respinse la publicarea în Google Play.
Fără Whitelist, aplicația poate utiliza FCM high-priority pentru a trezi dispozitivul din Doze. Fiecare astfel de mesaj oferă aplicației o fereastră scurtă (10–30 secunde) pentru a executa sarcina. Pentru operațiuni mai lungi, aplicația trebuie să lanseze Foreground Service, care va continua să funcționeze în ferestrele de serviciu Doze. Google oferă, de asemenea, un mecanism de exonerare pentru anumite tipuri de aplicații: de navigație, medicale, de mesagerie.
Pentru a verifica dacă aplicația se află în Whitelist de optimizare a bateriei, se utilizează metoda powerManager.isIgnoringBatteryOptimizations(). Dacă metoda returnează false, aplicația se supune tuturor restricțiilor Doze. Dacă true — aplicația poate utiliza Wakelock, AlarmManager și rețeaua fără restricții chiar și în Deep Doze. Cu toate acestea, abuzul acestui privilegiu va duce la recenzii negative din partea utilizatorilor.
Testarea comportamentului aplicației în Doze Mode este o etapă obligatorie de dezvoltare, deoarece Doze poate perturba funcțiile de fundal. Android oferă instrumente de linie de comandă prin ADB pentru trecerea forțată a dispozitivului în Light Doze și Deep Doze. Testarea trebuie efectuată pe un dispozitiv fizic sau emulator cu Android 6.0+.
Pentru intrarea în Light Doze se utilizează comanda adb shell dumpsys deviceidle step light. Pentru Deep Doze — adb shell dumpsys deviceidle step deep. Comanda adb shell dumpsys deviceidle force-idle deep trece imediat dispozitivul în Deep Doze fără a aștepta timeout-ul standard. După testare, Doze se dezactivează cu comanda adb shell dumpsys deviceidle unforce.
# Intrarea forțată în Light Doze
$ adb shell dumpsys deviceidle step light
# Intrarea forțată în Deep Doze
$ adb shell dumpsys deviceidle step deep
# Trecerea imediată în Deep Doze
$ adb shell dumpsys deviceidle force-idle deep
# Ieșirea din Doze
$ adb shell dumpsys deviceidle unforce
# Vizualizarea stării Doze
$ adb shell dumpsys deviceidle
După trecerea în Doze Mode, trebuie verificat: dacă cererile de rețea funcționează (ar trebui să fie amânate), dacă AlarmManager se declanșează, dacă mesajele FCM sunt livrate, dacă sarcinile WorkManager sunt executate corect. WorkManager în Doze continuă să funcționeze: sarcinile sale sunt executate în ferestrele de serviciu. Cu toate acestea, dacă sarcina necesită executare imediată, trebuie specificat setExpedited() sau utilizat Foreground Service.
Dezvoltarea unei aplicații rezistente la Doze Mode necesită reconsiderarea abordării sarcinilor de fundal. Google recomandă proiectarea aplicației astfel încât să funcționeze corect la orice restricții Doze, fără a se baza pe executarea imediată a operațiunilor de fundal. Principiul fundamental — utilizarea WorkManager pentru toate sarcinile de fundal care pot fi amânate.
WorkManager este API-ul recomandat de Google pentru sarcinile de fundal, deoarece se adaptează automat la Doze. WorkManager utilizează JobScheduler (API 23+) sau AlarmManager + BroadcastReceiver pe versiunile mai vechi. Sarcinile WorkManager sunt executate în cea mai apropiată fereastră de serviciu Doze, iar la nevoie — imediat prin Expedited Work (Foreground Service sub capotă).
Dacă sarcina nu poate fi amânată (redare media, navigație, VoIP), utilizați Foreground Service cu notificare obligatorie. Foreground Service primește excepție de la Doze: poate menține WakeLock și executa cereri de rețea. Cu toate acestea, chiar și Foreground Service se supune politicii ferestrelor de serviciu Deep Doze pentru anumite tipuri de sarcini — de exemplu, dataSync.
Pentru livrarea mesajelor care necesită atenție imediată (apel primit, notificare urgentă), utilizați mesajele FCM high-priority. Astfel de mesaje trezesc dispozitivul din Doze și oferă aplicației o fereastră scurtă pentru procesare. Nu utilizați high-priority pentru notificări obișnuite — aceasta va duce la descărcarea rapidă a bateriei și poate fi considerată de Google Play o încălcare a politicii.
Întrebări frecvente
Doze Mode este un mod de economisire a energiei Android 6+, care limitează activitatea de fundal a aplicațiilor atunci când dispozitivul nu este utilizat (ecran oprit, fără mișcare). Sistemul amână cererile de rețea, sincronizarea și JobScheduler, grupându-le în ferestre de serviciu pentru economisirea bateriei.
Doze Mode are două faze: Light Doze (somn ușor) se activează după 5–30 de minute, permite funcționarea AlarmManager cu întârzieri. Deep Doze (somn profund) survine după 60–90 de minute de imobilitate, limitând agresiv sarcinile de fundal cu ferestre de serviciu de până la 12 ore.
Doze blochează cererile de rețea, amână AlarmManager (cu excepția setAndAllowWhileIdle), eliberează forțat WakeLock și grupează JobScheduler în ferestre de serviciu. Excepție — Foreground Service, FCM high-priority și aplicațiile din Whitelist ale utilizatorului.
Solicitați permisiunea REQUEST_IGNORE_BATTERY_OPTIMIZATIONS în manifest și trimiteți Intent cu acțiunea ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Sistemul va afișa un dialog utilizatorului. Adăugarea în Whitelist este un privilegiu pe care Google recomandă să îl utilizați doar pentru aplicații critice.
Utilizați comenzi ADB: adb shell dumpsys deviceidle force-idle deep pentru intrarea în Deep Doze, adb shell dumpsys deviceidle step light pentru Light Doze, adb shell dumpsys deviceidle unforce pentru ieșire. Verificați funcționarea WorkManager, AlarmManager și FCM în fiecare mod.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și