Ang Doze Mode ay isang mode ng pagtitipid ng enerhiya sa Android na ipinakilala sa bersyon 6.0 Marshmallow, na makabuluhang naglilimita sa aktibidad sa background ng mga app kapag hindi aktibo ang device. Inililipat ng system ang mga app sa estado ng pinababang konsumo ng kuryente, ipinagpapaliban ang mga network request, synchronization at JobScheduler upang pahabain ang buhay ng baterya. Ayon sa pagsusuri ng Android Developers, 2025, ang Doze Mode ay nagbibigay-daan upang mapataas ang standby time ng device nang 2–3 beses depende sa modelo at bersyon ng OS.
Mga Pangunahing Punto
Doze Mode ay isang built-in na mekanismo ng pagtitipid ng enerhiya sa Android na naa-activate kapag ang device ay hindi naka-charge, naka-off ang screen at hindi nakikipag-ugnayan ang user sa device sa loob ng isang tiyak na oras. Ang layunin ng Doze ay upang mabawasan ang aktibidad sa background ng mga app upang mapahaba ang buhay ng baterya sa standby mode. Ipinagpapaliban ng system ang JobScheduler, account synchronization, AlarmManager at mga network request.
Ang mode ay ipinakilala sa Android 6.0 Marshmallow (API 23) at makabuluhang pinabuti sa mga sumusunod na bersyon. Sa Android 7.0 Nougat lumitaw ang pangalawang phase (Light Doze) na naa-activate sa paggalaw ng device. Ipinakilala ng Android 8.0 ang karagdagang mga paghihigpit sa mga background service na gumagana kasabay ng Doze. Sa Android 12+, ang Doze ay isinama sa na-update na sistema ng pamamahala ng baterya na sumusuri sa gawi ng user.
Mahalagang maunawaan: Hindi ganap na pinapatay ng Doze Mode ang mga app. Inililipat nito ang mga ito sa estado na may mga ipinagpaliban na task, ngunit hindi pinapatay ang mga proseso. Ang Foreground Service na may notification ay patuloy na gumagana, ang mga high-priority push notification (FCM high-priority) ay naihahatid, at ang mga alarm ay tumutunog ayon sa iskedyul. Ang Doze ay nakakaapekto lamang sa mga background operation na hindi nakikita at hindi inaasahan ng user sa sandaling iyon.
Doze Mode ay naa-activate kapag natugunan ang lahat ng kondisyon: naka-off ang screen nang higit sa 30 minuto (unang pag-activate), hindi gumagalaw ang device (ginagamit ang accelerometer), hindi naka-charge. Kung kukunin ng user ang telepono o isaksak ang charger, agad na na-deactivate ang Doze. Sa Android 7+, ang Light Doze ay naa-activate pagkatapos ng 5 minutong hindi aktibo, kahit na gumagalaw ang device.
Doze Mode ay namamahala sa aktibidad sa background sa pamamagitan ng system service na DeviceIdleController, na sumusuri sa estado ng mga sensor, screen at charger. Kapag natugunan ang lahat ng kondisyon ng pag-activate, inililipat ng system ang mga app sa standby mode, pinapangkat ang kanilang mga request sa mga service window. Sa loob ng mga window na ito, lahat ng ipinagpaliban na task — network calls, synchronization, AlarmManager — ay isinasagawa nang naka-batch.
Ang system PowerManager ay kumokontrol kung aling mga app ang maaaring lumabas mula sa Doze. Ang mga high-priority push notification (FCM high-priority) ay maaaring gumising sa device para maghatid ng mensahe. Hindi rin pinapansin ng system ang Doze para sa mga app na idinagdag ng user sa Whitelist ng battery optimization. Ang lahat ng iba pang app ay dapat maghintay ng susunod na service window.
Ang tagal ng mga service window sa Deep Doze ay tumataas nang exponentially: unang window pagkatapos ng 1 oras, pangalawa pagkatapos ng 2 oras, pangatlo pagkatapos ng 4 na oras at iba pa hanggang sa maximum na interval na 12 oras. Nangangahulugan ito na habang mas matagal ang device sa Doze, mas madalang na makapagsagawa ang mga app ng background task — ang baterya ay napakatipid nang maximum na agresibo.
Sa Doze Mode, lahat ng network request ay sinuspinde hanggang sa pagdating ng service window. Tanging FCM high-priority na mensahe (may tag na “high_priority” sa payload) at mga signal mula sa AlarmManager na may mga flag na setAndAllowWhileIdle() o setExactAndAllowWhileIdle() ang exception. Ang mga ordinaryong network call sa pamamagitan ng Retrofit, OkHttp o Volley ay hindi isasagawa hanggang sa magbukas ang window.
Doze Mode ay binubuo ng dalawang phase: Light Doze (magaan na tulog) at Deep Doze (malalim na tulog). Bawat phase ay nagpapatupad ng sarili nitong mga paghihigpit at may iba't ibang threshold ng pag-activate. Ang pag-unawa sa pagkakaiba sa pagitan ng mga phase ay mahalaga para sa developer na nagdidisenyo ng mga background task na lumalaban sa mode ng pagtitipid ng enerhiya.
Light Doze ay naa-activate pagkatapos ng 5–30 minuto ng hindi aktibo (naka-off ang screen, walang galaw). Sa phase na ito, ang mga network request at synchronization ay sinuspinde, ngunit ang AlarmManager at JobScheduler ay patuloy na gumagana nang may maliliit na pagkaantala. Ang mga app ay maaaring lumabas mula sa Light Doze kapag nakatanggap ng push notification o kapag naka-charge. Ang Light Doze ay hindi nangangailangan ng kumpletong immobility — ang device ay maaaring gumalaw.
Deep Doze ay nangyayari pagkatapos ng 60–90 minuto ng hindi aktibo na walang galaw ang device (hindi nakikita ng accelerometer ang paggalaw). Sa Deep Doze, mas agresibong ipinagpapaliban ng system ang mga task: mas madalang magbukas ang mga service window (na may exponentially tumataas na interval), ang AlarmManager ay gumagana lamang sa mga flag na setAndAllowWhileIdle(), at ang WakeLock ay hindi gumagana sa normal na mode. Ang mga app na wala sa Whitelist ay halos ganap na nawawalan ng aktibidad sa background.
| Parameter | Light Doze | Deep Doze |
|---|---|---|
| Oras ng pag-activate | 5–30 minuto | 60–90 minuto |
| Kinakailangang galaw | Hindi kinakailangan | Immobility |
| Interval ng window | 10–60 minuto | 1–12 oras |
| AlarmManager | Gumagana nang may pagkaantala | withAllowWhileIdle lang |
| Network sa mga window | Available | Available |
Doze Mode ay nagpapatupad ng ilang kategorya ng mga paghihigpit na dapat isaalang-alang ng developer kapag nagdidisenyo ng app. Ang pagbalewala sa mga paghihigpit na ito ay nagreresulta sa hindi pagganap ng mga background task at nakikita ng user ang hindi tamang paggana ng app — kawalan ng mga update, hindi naipadalang mensahe, hindi nagawang synchronization.
Lahat ng network request ay hinaharangan hanggang sa pagdating ng service window. Kasama rito ang mga HTTP call, WebSocket connection, pag-download ng file. Exception — FCM high-priority na mensahe na dumadaan sa hiwalay na channel ng Google Play Services, hindi umaasa sa Doze. Para sa synchronization ng kritikal na data, inirerekomenda ang paggamit ng WorkManager na may patakarang NetworkType.CONNECTED.
AlarmManager sa Deep Doze ay ipinagpapaliban ang lahat ng alarm maliban sa mga ginawa gamit ang mga method na setAndAllowWhileIdle() at setExactAndAllowWhileIdle(). Gayunpaman, kahit ang mga method na ito ay may limitasyon — hindi hihigit sa 1 pag-activate sa bawat 9 minuto bawat app. Ang mga eksaktong alarm na setExact() sa Deep Doze ay hindi ginagarantiyahan ang pag-activate sa itinakdang oras.
WakeLock sa Doze Mode ay gumagana nang hindi karaniwan: hindi pinapanatili ng system ang sleep lock para sa mga app sa labas ng Whitelist. Kahit na nakuha ng app nang tama ang PARTIAL_WAKE_LOCK, pagdating ng Deep Doze ay maaaring puwersahin itong bitawan ng system. Ang tanging paraan upang garantiyahan ang pagganap ng task sa Doze ay ang paggamit ng Foreground Service na may notification.
Whitelist (white list) Doze ay ang set ng mga app na pinapayagan ng system na magkaroon ng background na aktibidad sa mode ng pagtitipid ng enerhiya na may minimal na paghihigpit. Maaaring manu-manong magdagdag ng mga app ang user sa pamamagitan ng Settings → Baterya → Battery Optimization. Ang mga system app, launcher at Google Play Services ay nasa Whitelist bilang default.
Ang developer ay maaaring humiling ng pagdagdag sa Whitelist sa pamamagitan ng system dialog na may Intent ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Para dito, kinakailangan ang permission na REQUEST_IGNORE_BATTERY_OPTIMIZATIONS sa manifest. Gayunpaman, hindi inirerekomenda ng Google na humingi ng exception nang walang matibay na dahilan — ang mga app na umaabuso sa kakayahang ito ay nanganganib na tanggihan sa pag-publish sa Google Play.
Kung walang Whitelist, ang app ay maaaring gumamit ng FCM high-priority para gisingin ang device mula sa Doze. Bawat naturang mensahe ay nagbibigay sa app ng maikling window (10–30 segundo) para magsagawa ng task. Para sa mas mahabang operasyon, ang app ay dapat maglunsad ng Foreground Service na magpapatuloy sa paggana sa mga service window ng Doze. Nagbibigay din ang Google ng mekanismo ng exemption para sa ilang uri ng app: navigation, medikal, messaging.
Para suriin kung ang app ay nasa Whitelist ng battery optimization, ginagamit ang method na powerManager.isIgnoringBatteryOptimizations(). Kung ang method ay nagbabalik ng false, ang app ay sumusunod sa lahat ng paghihigpit ng Doze. Kung true — ang app ay maaaring gumamit ng Wakelock, AlarmManager at network nang walang paghihigpit kahit sa Deep Doze. Gayunpaman, ang pag-abuso sa pribilehiyong ito ay hahantong sa masamang review mula sa mga user.
Pagsubok ng gawi ng app sa Doze Mode ay isang mandatoryong yugto ng pag-develop, dahil maaaring sirain ng Doze ang mga background function. Nagbibigay ang Android ng mga command line tool sa pamamagitan ng ADB para sapilitang ilipat ang device sa Light Doze at Deep Doze. Ang pagsubok ay dapat isagawa sa pisikal na device o emulator na may Android 6.0+.
Para pumasok sa Light Doze ginagamit ang command na adb shell dumpsys deviceidle step light. Para sa Deep Doze — adb shell dumpsys deviceidle step deep. Ang command na adb shell dumpsys deviceidle force-idle deep ay agad na inililipat ang device sa Deep Doze nang hindi naghihintay ng standard timeout. Pagkatapos ng pagsubok, ang Doze ay pinapatay gamit ang command na adb shell dumpsys deviceidle unforce.
# Sapilitang pagpasok sa Light Doze
$ adb shell dumpsys deviceidle step light
# Sapilitang pagpasok sa Deep Doze
$ adb shell dumpsys deviceidle step deep
# Agad na paglipat sa Deep Doze
$ adb shell dumpsys deviceidle force-idle deep
# Paglabas mula sa Doze
$ adb shell dumpsys deviceidle unforce
# Pagtingin ng status ng Doze
$ adb shell dumpsys deviceidle
Pagkatapos lumipat sa Doze Mode, kailangang suriin: kung gumagana ang network request (dapat ipinagpaliban), kung nag-a-activate ang AlarmManager, kung naihahatid ang FCM messages, kung tama ang pagganap ng WorkManager tasks. Ang WorkManager sa Doze ay patuloy na gumagana: ang mga task nito ay isinasagawa sa mga service window. Gayunpaman, kung ang task ay nangangailangan ng agarang pagganap, dapat tukuyin ang setExpedited() o gumamit ng Foreground Service.
Ang pag-develop ng app na lumalaban sa Doze Mode ay nangangailangan ng pag-reconsider ng approach sa background tasks. Inirerekomenda ng Google na idisenyo ang app upang gumana nang tama sa anumang paghihigpit ng Doze, nang hindi umaasa sa agarang pagganap ng background operations. Ang pangunahing prinsipyo — gamitin ang WorkManager para sa lahat ng background task na maaaring ipagpaliban.
WorkManager ay ang inirerekomendang Google API para sa background tasks, dahil awtomatiko itong umaangkop sa Doze. Gumagamit ang WorkManager ng JobScheduler (API 23+) o AlarmManager + BroadcastReceiver sa mga lumang bersyon. Ang WorkManager tasks ay isinasagawa sa pinakamalapit na service window ng Doze, at kung kinakailangan — agad sa pamamagitan ng Expedited Work (Foreground Service sa ilalim ng hood).
Kung ang task ay hindi maaaring ipagpaliban (media playback, navigation, VoIP), gamitin ang Foreground Service na may mandatoryong notification. Ang Foreground Service ay nakakakuha ng exception mula sa Doze: maaari itong humawak ng WakeLock at magsagawa ng network request. Gayunpaman, kahit ang Foreground Service ay sumusunod sa patakaran ng Deep Doze service window para sa ilang uri ng task — halimbawa, dataSync.
Para maghatid ng mga mensahe na nangangailangan ng agarang atensyon (papasok na tawag, urgent notification), gamitin ang FCM high-priority na mensahe. Ang ganitong mga mensahe ay gumigising sa device mula sa Doze at nagbibigay sa app ng maikling window para sa pagproseso. Huwag gumamit ng high-priority para sa ordinaryong notification — ito ay hahantong sa mabilis na pagkaubos ng baterya at maaaring ituring ng Google Play na paglabag sa patakaran.
Mga Madalas Itanong
Doze Mode ay isang mode ng pagtitipid ng enerhiya ng Android 6+ na naglilimita sa aktibidad sa background ng mga app kapag hindi ginagamit ang device (naka-off ang screen, walang galaw). Ipinagpapaliban ng system ang mga network request, synchronization at JobScheduler, pinapangkat ang mga ito sa mga service window para makatipid ng baterya.
Doze Mode ay may dalawang phase: Light Doze (magaan na tulog) ay naa-activate pagkatapos ng 5–30 minuto, pinapayagan ang AlarmManager na gumana nang may pagkaantala. Deep Doze (malalim na tulog) ay nangyayari pagkatapos ng 60–90 minuto ng immobility, agresibong nililimitahan ang background tasks na may service window hanggang 12 oras.
Doze ay humaharang ng network request, ipinagpapaliban ang AlarmManager (maliban sa setAndAllowWhileIdle), puwersahang pinakawalan ang WakeLock at pinapangkat ang JobScheduler sa mga service window. Exception — Foreground Service, FCM high-priority at mga app sa Whitelist ng user.
Humingi ng permiso na REQUEST_IGNORE_BATTERY_OPTIMIZATIONS sa manifest at magpadala ng Intent na may action na ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Magpapakita ang system ng dialog sa user. Ang pagdagdag sa Whitelist ay isang pribilehiyo na inirerekomenda ng Google na gamitin lamang ng mga kritikal na app.
Gumamit ng ADB command: adb shell dumpsys deviceidle force-idle deep para pumasok sa Deep Doze, adb shell dumpsys deviceidle step light para sa Light Doze, adb shell dumpsys deviceidle unforce para lumabas. Suriin ang paggana ng WorkManager, AlarmManager at FCM sa bawat mode.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din