Understanding Android Doze Mode: States, Restrictions, and Whitelists
This article explains Android's Doze power‑saving mode, detailing its light and deep doze states, the restrictions imposed on apps, the state‑machine transitions, whitelist mechanisms, and common troubleshooting Q&A for developers working on mobile devices.
When an Android device is idle, screen‑off, and not charging, it eventually enters Doze mode, a low‑power state that limits network and CPU‑intensive services, blocks network access, and delays jobs, syncs, and standard alarms until a periodic maintenance window.
Doze consists of two main phases: Light Doze, which imposes fewer restrictions and includes short maintenance windows, and Deep Doze, which adds stricter limits such as blocking Wi‑Fi scans and suspending JobScheduler tasks. Devices transition from Light to Deep Doze after remaining stationary for a period.
During Deep Doze, apps face restrictions like network suspension, ignored wake locks, delayed AlarmManager alarms (unless using setAndAllowWhileIdle() or setExactAndAllowWhileIdle() ), and disabled WLAN scans, sync adapters, and JobScheduler. Whitelisted apps (system‑excidle, system, and user lists) are exempt from these limits.
The core service controlling Doze transitions is DeviceIdleController , which notifies other subsystems (Network, Alarm, PowerMS) when entering or exiting idle states. The article outlines the state‑machine flow for both Light and Deep Doze, showing how the device moves through states like LIGHT_STATE_INACTIVE , PRE_IDLE , LIGHT_STATE_IDLE , MAINTENANCE , WAITING_FOR_NETWORK , Idle_pending , Sensing , Locating , and finally deep idle , with timing formulas involving the number of idle‑window cycles (N).
Doze also uses three whitelist categories, defined in code as private final ArrayMap mPowerSaveWhitelistAppsExceptIdle = new ArrayMap<>(); , private final ArrayMap mPowerSaveWhitelistApps = new ArrayMap<>(); , and private final ArrayMap mPowerSaveWhitelistUserApps = new ArrayMap<>(); . Developers can query these lists with dumpsys deviceidle whitelist and modify them via addPowerSaveWhitelistApps .
Common troubleshooting questions are addressed: third‑party apps not on the whitelist may still avoid network restrictions if their process priority meets certain criteria; Doze does not directly affect an app's UID idle state except through whitelist membership; differences between Doze, Battery Saver, App Standby, and deep sleep are clarified, highlighting distinct trigger conditions and overlapping restrictions.
References: Android developer documentation on Doze and Standby, with links to the official guide.
Coolpad Technology Team
Committed to advancing technology and supporting innovators. The Coolpad Technology Team regularly shares forward‑looking insights, product updates, and tech news. Tech experts are welcome to join; everyone is invited to follow us.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.