Doze Mode: الجوهر والمراحل وآلية توفير الطاقة

المؤلف: IT Sectr نُشر: 2026-03-28 وقت القراءة: 10 دق

Doze Mode هي وظيفة توفير الطاقة في Android، أدخلت في الإصدار 6.0 Marshmallow، وتقيد بشكل كبير نشاط التطبيقات في الخلفية عندما يكون الجهاز خامدًا. يقوم النظام بتحويل التطبيقات إلى حالة استهلاك منخفض للطاقة، من خلال تأجيل طلبات الشبكة والمزامنة و JobScheduler، لإطالة عمر البطارية. وفقًا لتحليل Android Developers, 2025، يستطيع Doze Mode زيادة وقت الاستعداد للجهاز بنسبة 2–3 مرات حسب الطراز ونسخة نظام التشغيل.

النقاط الرئيسية

  • Doze Mode — وضع السبات Android 6+ الذي يقيد النشاط الخلفي عند الخمول
  • مرحلتان — Light Doze (نوم خفيف) و Deep Doze (نوم عميق) بقيود مختلفة
  • نوافذ الصيانة — فترات قصيرة يمكن فيها للتطبيقات تنفيذ المهام في Deep Doze
  • القائمة البيضاء — استثناءات للتطبيقات المسموح لها بالعمل في الخلفية أثناء Doze
  • GCM/FCM — إعلامات دفع عالية الأولوية تُيقظ الجهاز من Doze

ما هو Doze Mode

Doze Mode هو آلية مدمجة لتوفير الطاقة في Android، تنشط عندما لا يكون الجهاز متصلاً بشاحن، والشاشة مطفأة، ولم يتفاعل المستخدم مع الجهاز لفترة معينة. الهدف من Doze هو تقليل نشاط التطبيقات في الخلفية لتعظيم عمر البطارية في وضع الاستعداد. يقوم النظام بتأجيل JobScheduler، ومزامنة الحسابات، و AlarmManager، وطلبات الشبكة.

تم تقديم هذا الوضع في Android 6.0 Marshmallow (API 23) وتم تحسينه بشكل كبير في الإصدارات اللاحقة. قدم Android 7.0 Nougat مرحلة ثانية (Light Doze) تنشط عند حركة الجهاز. أضاف Android 8.0 قيودًا إضافية على الخدمات الخلفية التي تعمل بالتزامن مع Doze. في Android 12+، تم دمج Doze مع نظام إدارة البطارية المحدث الذي يحلل سلوك المستخدم.

من المهم فهم أن Doze Mode لا يعطل التطبيقات بالكامل. إنه يضعها في حالة مع مهام مؤجلة، ولكنه لا يقتل العمليات. يستمر Foreground Service مع إشعار في العمل، وتصل إعلامات الدفع عالية الأولوية (FCM high-priority)، وتنطلق المنبهات حسب الجدول. Doze يؤثر فقط على عمليات الخلفية التي لا يراها المستخدم ولا يتوقعها في تلك اللحظة.

شروط التنشيط

Doze Mode ينشط عند تحقق جميع الشروط: إطفاء الشاشة لأكثر من 30 دقيقة (التنشيط الأول)، الجهاز ثابت (باستخدام مقياس التسارع)، وغير متصل بشاحن. إذا التقط المستخدم الهاتف أو وصل شاحنًا، يتم إلغاء تنشيط Doze فورًا. في Android 7+، ينشط Light Doze بعد 5 دقائق فقط من عدم النشاط، حتى عند حركة الجهاز.

كيف يعمل Doze Mode

Doze Mode يدير النشاط الخلفي من خلال خدمة النظام DeviceIdleController، التي تحلل حالة الحساسات والشاشة والشاحن. عند تحقق جميع شروط التنشيط، يقوم النظام بتحويل التطبيقات إلى وضع الاستعداد، مجمعًا طلباتها في نوافذ صيانة. داخل هذه النوافذ، تتم تنفيذ جميع المهام المؤجلة — استدعاءات الشبكة، المزامنة، AlarmManager — دفعة واحدة.

PowerManager في النظام يتحكم في التطبيقات التي يمكنها الخروج من Doze. تستطيع إعلامات الدفع عالية الأولوية (FCM high-priority) إيقاظ الجهاز لتسليم رسالة. كما أن النظام يتجاهل Doze للتطبيقات التي أضافها المستخدم إلى القائمة البيضاء لتحسين البطارية. جميع التطبيقات الأخرى يجب أن تنتظر نافذة الصيانة التالية.

تزداد مدة نوافذ الصيانة في Deep Doze أسييًا: النافذة الأولى بعد ساعة، الثانية بعد ساعتين، الثالثة بعد 4 ساعات، وهكذا حتى فترة قصوى تبلغ 12 ساعة. هذا يعني أنه كلما كان الجهاز في Doze لفترة أطول، قلما تمكن التطبيقات من تنفيذ مهام الخلفية — وبالتالي يتم توفير البطارية بأقصى شكل ممكن.

التأثير على طلبات الشبكة

في Doze Mode، تتم تعليق جميع طلبات الشبكة حتى افتتاح نافذة صيانة. الاستثناءات الوحيدة هي رسائل FCM عالية الأولوية (مع وسم “high_priority” في الحمولة) وإشارات من AlarmManager بعلامات setAndAllowWhileIdle() أو setExactAndAllowWhileIdle(). لن تتم تنفيذ استدعاءات الشبكة العادية عبر Retrofit، OkHttp أو Volley حتى تفتح نافذة.

مراحل Doze Mode

Doze Mode يتكون من مرحلتين: Light Doze (نوم خفيف) و Deep Doze (نوم عميق). كل مرحلة تفرض قيودها الخاصة ولها عتبات تنشيط مختلفة. فهم الفرق بين المرحلتين أمر حاسم للمطور الذي يصمم مهام خلفية مقاومة لوضع توفير الطاقة.

Light Doze (نوم خفيف)

Light Doze ينشط بعد 5–30 دقيقة من عدم نشاط الجهاز (إطفاء الشاشة، عدم الحركة). في هذه المرحلة، تتم تعليق طلبات الشبكة والمزامنة، ولكن AlarmManager و JobScheduler يستمران في العمل مع تأخيرات طفيفة. يمكن للتطبيقات الخروج من Light Doze عند استلام إعلام دفع أو عند الاتصال بشاحن. Light Doze لا يتطلب عدم الحركة الكاملة — يمكن أن يكون الجهاز في حركة.

Deep Doze (نوم عميق)

Deep Doze يحدث بعد 60–90 دقيقة من عدم النشاط مع جهاز ثابت (لا يكتشف مقياس التسارع حركة). في Deep Doze، يكون النظام أكثر عدوانية في تأجيل المهام: تفتح نوافذ الصيانة بشكل أقل تكرارًا (مع زيادة أسية في الفاصل)، يعمل AlarmManager فقط بعلامات setAndAllowWhileIdle()، ولا يعمل WakeLock بالطريقة العادية. التطبيقات غير الموجودة في القائمة البيضاء تفتقد تقريبًا كل النشاط الخلفي.

المعلمةLight DozeDeep Doze
وقت التنشيط5–30 دقيقة60–90 دقيقة
متطلب الحركةغير مطلوبثبات
فاصل النوافذ10–60 دقيقة1–12 ساعة
AlarmManagerيعمل مع تأخيراتفقط withAllowWhileIdle
الشبكة في النوافذمتاحةمتاحة

القيود في Doze Mode

Doze Mode يفرض عدة فئات من القيود التي يجب على المطور مراعاتها عند تصميم التطبيق. إهمال هذه القيود يؤدي إلى عدم تنفيذ المهام الخلفية، ويرى المستخدم سلوكًا غير صحيح للتطبيق — تحديثات مفقودة، رسائل غير مرسلة، مزامنة غير مكتملة.

قيود الشبكة

تتم حجب جميع طلبات الشبكة حتى افتتاح نافذة صيانة. يشمل ذلك استدعاءات HTTP، وصلات WebSocket، وتنزيل الملفات. الاستثناء هو رسائل FCM عالية الأولوية، التي تمر عبر قناة منفصلة لخدمات Google Play مستقلة عن Doze. لمزامنة البيانات الحرجة، يوصى باستخدام WorkManager مع سياسة NetworkType.CONNECTED.

قيود AlarmManager

AlarmManager في Deep Doze يؤجل جميع المنبهات باستثناء تلك المنشأة بطرقتي setAndAllowWhileIdle() و setExactAndAllowWhileIdle(). ولكن حتى هذه الطرق لها حد — لا يزيد عن تنشيط واحد كل 9 دقائق لكل تطبيق. المنبهات الدقيقة بواسطة setExact() في Deep Doze لا تضمن التنشيط في الوقت المحدد.

قيود WakeLock

WakeLock يتصرف بشكل غير اعتيادي في Doze Mode: لا يحتفظ النظام بقفل الاستيقاظ للتطبيقات خارج القائمة البيضاء. حتى إذا كان التطبيق قد حصل بشكل صحيح على PARTIAL_WAKE_LOCK، عند بدء Deep Doze، قد يقوم النظام بتحريره قسريًا. الطريقة الوحيدة لضمان تنفيذ المهمة في Doze هي استخدام Foreground Service مع إشعار.

  • الشبكة — جميع الطلبات مؤجلة حتى نافذة الصيانة، باستثناء FCM high-priority
  • AlarmManager — المنبهات الدقيقة مؤجلة؛ setAndAllowWhileIdle — لا يزيد عن 1/9 دقيقة
  • WakeLock — يتم تحريره قسريًا للتطبيقات خارج القائمة البيضاء
  • JobScheduler — المهام مجمعة في نوافذ صيانة بفاصل أسية
  • المزامنة — Account SyncManager معلق حتى الخروج من Doze

القائمة البيضاء والاستثناءات

القائمة البيضاء لـ Doze هي قائمة التطبيقات التي يسمح لها النظام بالنشاط الخلفي في وضع توفير الطاقة مع قيود دنيا. يمكن للمستخدم إضافة التطبيقات دويًا إلى القائمة من خلال الإعدادات → البطارية → تحسين البطارية. تطبيقات النظام، ومشغلات التطبيقات، وخدمات Google Play موجودة في القائمة البيضاء بشكل افتراضي.

يمكن للمطور طلب الإضافة إلى القائمة البيضاء من خلال حوار نظام باستخدام Intent ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. يتطلب ذلك الإذن REQUEST_IGNORE_BATTERY_OPTIMIZATIONS في البيان. ولكن، لا يوصي Google بطلب استثناء دون سبب مشروع — التطبيقات التي تسيء استخدام هذه الإمكانية تخاطر بالرفض عند النشر على Google Play.

بدون القائمة البيضاء، يمكن للتطبيق استخدام FCM عالي الأولوية لإيقاظ الجهاز من Doze. كل رسالة من هذا النوع تمنح التطبيق نافذة قصيرة (10–30 ثانية) لتنفيذ مهمة. للعمليات الأطول، يجب على التطبيق تشغيل Foreground Service، وهو ما يستمر في العمل داخل نوافذ صيانة Doze. كما أن Google توفر آلية إعفاء لأنواع معينة من التطبيقات: الملاحة، الطبية، التراسل.

كيفية التحقق من حالة القائمة البيضاء

للتحقق مما إذا كان التطبيق موجودًا في القائمة البيضاء لتحسين البطارية، استخدم الطريقة powerManager.isIgnoringBatteryOptimizations(). إذا كانت الطريقة تعيد false، فالتطبيق يخضع لجميع قيود Doze. إذا كانت تعيد true، فيمكن للتطبيق استخدام Wakelock، AlarmManager والشبكة دون قيود حتى في Deep Doze. ولكن إساءة استخدام هذه الامتيازات ستؤدي إلى تقييمات سيئة من المستخدمين.

اختبار Doze Mode

اختبار سلوك التطبيق في Doze Mode هو خطوة تطوير إلزامية، لأن Doze قد يعطل وظائف الخلفية. يوفر Android أدوات سطر الأوامر من خلال ADB للانتقال الإجباري للجهاز إلى Light Doze و Deep Doze. يجب إجراء الاختبارات على جهاز فعلي أو محاكي بإصدار Android 6.0+.

للدخول إلى Light Doze، استخدم الأمر adb shell dumpsys deviceidle step light. لـ Deep Doze — adb shell dumpsys deviceidle step deep. الأمر adb shell dumpsys deviceidle force-idle deep ينقل الجهاز فورًا إلى Deep Doze دون انتظار المهلة القياسية. بعد الاختبار، يتم الخروج من Doze بالأمر adb shell dumpsys deviceidle unforce.

bash
# الدخول الإجباري إلى Light Doze
$ adb shell dumpsys deviceidle step light

# الدخول الإجباري إلى Deep Doze
$ adb shell dumpsys deviceidle step deep

# الانتقال الفوري إلى Deep Doze
$ adb shell dumpsys deviceidle force-idle deep

# الخروج من Doze
$ adb shell dumpsys deviceidle unforce

# عرض حالة Doze
$ adb shell dumpsys deviceidle

التحقق من عمل التطبيق

بعد الانتقال إلى Doze Mode، تحقق مما إذا كانت طلبات الشبكة تعمل (يجب أن تكون مؤجلة)، وهل ينطلق AlarmManager، وهل تصل رسائل FCM، وهل تتم تنفيذ مهام WorkManager بشكل صحيح. WorkManager يستمر في العمل خلال Doze: تتم تنفيذ مهامه في نوافذ الصيانة. ولكن إذا كانت المهمة تتطلب تنفيذًا فوريًا، حدد setExpedited() أو استخدم Foreground Service.

أفضل الممارسات لـ Doze Mode

تطوير تطبيق مقاوم لـ Doze Mode يتطلب إعادة النظر في المقاربة للمهام الخلفية. يوصي Google بتصميم التطبيق بحيث يعمل بشكل صحيح تحت أي قيود لـ Doze، دون الاعتماد على التنفيذ الفوري للعمليات الخلفية. المبدأ الأساسي هو استخدام WorkManager لجميع المهام الخلفية التي يمكن تأجيلها.

استخدام WorkManager

WorkManager هو API Google الموصى به للمهام الخلفية لأنه يتكيف تلقائيًا مع Doze. يستخدم WorkManager JobScheduler (API 23+) أو AlarmManager + BroadcastReceiver في الإصدارات القديمة. تتم تنفيذ مهام WorkManager في أقرب نافذة صيانة لـ Doze، أو فورًا عند الضرورة من خلال Expedited Work (Foreground Service تحت الغطاء).

Foreground Service للمهام الحرجة

إذا كانت المهمة لا يمكن تأجيلها (تشغيل الوسائط، الملاحة، VoIP)، استخدم Foreground Service مع إشعار إلزامي. يحصل Foreground Service على إعفاء من Doze: يمكنه احتفاظ WakeLock وتنفيذ طلبات الشبكة. ولكن حتى Foreground Service يخضع لسياسات نوافذ صيانة Deep Doze لبعض أنواع المهام — على سبيل المثال، dataSync.

FCM عالي الأولوية للإشعارات

لتسليم الرسائل التي تتطلب اهتمامًا فوريًا (مكالمة واردة، إشعار عاجل)، استخدم رسائل FCM عالية الأولوية. تقوم هذه الرسائل بإيقاظ الجهاز من Doze وتمنح التطبيق نافذة قصيرة للمعالجة. لا تستخدم الأولوية العالية للإشعارات العادية — فهذا سيؤدي إلى استنزاف سريع للبطارية وقد يعتبر انتهاكًا لسياسة Google Play.

  • WorkManager — API المفضل لجميع المهام الخلفية المؤجلة
  • Foreground Service — للمهام الحرجة مع إشعار مرئي
  • FCM عالي الأولوية — لتسليم الرسائل العاجلة مع إيقاظ الجهاز
  • لا تطلب القائمة البيضاء دون حاجة قصوى — هذا يضر تجربة المستخدم
  • اختبر التطبيق في Light و Deep Doze عبر ADB قبل الإصدار

الأسئلة الشائعة

ما هو Doze Mode في Android؟

Doze Mode هو وضع توفير الطاقة في Android 6+ يقيد نشاط التطبيقات في الخلفية عندما لا يكون الجهاز قيد الاستخدام (الشاشة مطفأة، لا حركة). يقوم النظام بتأجيل طلبات الشبكة والمزامنة و JobScheduler، مجمعًا إياها في نوافذ صيانة لتوفير البطارية.

ما مراحل Doze Mode الموجودة؟

Doze Mode له مرحلتان: Light Doze (نوم خفيف) ينشط بعد 5–30 دقيقة ويسمح لـ AlarmManager بالعمل مع تأخيرات. Deep Doze (نوم عميق) يحدث بعد 60–90 دقيقة من عدم الحركة، ويقيد بشكل عدواني المهام الخلفية بنوافذ صيانة تصل إلى 12 ساعة.

ما القيود التي يفرضها Doze على التطبيقات؟

Doze يحجب طلبات الشبكة، ويؤجل AlarmManager (باستثناء setAndAllowWhileIdle)، ويحرر WakeLock قسريًا، ويجمع JobScheduler في نوافذ صيانة. استثناءات: Foreground Service، FCM عالي الأولوية، والتطبيقات في القائمة البيضاء للمستخدم.

كيف أضيف تطبيقًا إلى القائمة البيضاء لـ Doze؟

اطلب الإذن REQUEST_IGNORE_BATTERY_OPTIMIZATIONS في البيان وأرسل Intent بإجراء ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. سيظهر النظام حوارًا للمستخدم. الإضافة إلى القائمة البيضاء هي امتياز يوصي Google باستخدامه فقط للتطبيقات الحاسمة.

كيف أختبر التطبيق في Doze Mode؟

استخدم أوامر ADB: adb shell dumpsys deviceidle force-idle deep للدخول إلى Deep Doze، adb shell dumpsys deviceidle step light لـ Light Doze، adb shell dumpsys deviceidle unforce للخروج. تحقق من سلوك WorkManager، AlarmManager و FCM في كل وضع.

الملخص

  • Doze Mode — وضع سبات Android 6+ ينشط عند خمول الجهاز لتوفير البطارية
  • Light Doze — مرحلة خفيفة بعد 5–30 دقيقة، قيود جزئية على AlarmManager والشبكة
  • Deep Doze — مرحلة عميقة بعد 60–90 دقيقة من عدم الحركة بنوافذ صيانة تصل إلى 12 ساعة
  • القيود — حجب الشبكة، تأجيل AlarmManager، تحرير WakeLock
  • الاستثناءات — Foreground Service، FCM عالي الأولوية، تطبيقات القائمة البيضاء
  • WorkManager — API موصى به للمهام الخلفية، يتكيف تلقائيًا مع Doze
  • الاختبار — التحقق الإلزامي عبر ADB (dumpsys deviceidle) قبل الإصدار

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا