Operations 12 min read

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.

Coolpad Technology Team
Coolpad Technology Team
Coolpad Technology Team
Understanding Android Doze Mode: States, Restrictions, and Whitelists

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.

mobile developmentAndroidpower managementWhitelistDevice IdleDoze
Coolpad Technology Team
Written by

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.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.