يحتوي نظام Android على ميزتَين لتوفير الطاقة تعملان على إطالة عمر البطارية للمستخدمين من خلال إدارة سلوك التطبيقات عندما لا يكون الجهاز متصلاً بمصدر طاقة، وهما: "قيلولة" و"تطبيقات وضع الاستعداد". يقلل وضع الاستراحة من استهلاك البطارية عن طريق تأجيل نشاط وحدة المعالجة المركزية والشبكة في الخلفية للتطبيقات عندما لا يتم استخدام الجهاز لفترات طويلة. تعمل ميزة تطبيقات وضع الاستعداد على تأجيل نشاط الشبكة في الخلفية للتطبيقات التي لم يسجّل المستخدم أي نشاط حديث عليها.
عندما يكون الجهاز في وضع قيلولة، يتم تأجيل وصول التطبيقات إلى بعض الموارد التي تستهلك قدرًا كبيرًا من طاقة البطارية إلى أن يحين وقت نافذة الصيانة. يتم إدراج القيود المحدّدة في قيود إدارة الطاقة.
تتحكّم ميزتا "الاستراحة" و"تطبيقات وضع الاستعداد" في سلوك جميع التطبيقات التي تعمل على الإصدار 6.0 من نظام التشغيل Android أو الإصدارات الأحدث، بغض النظر عمّا إذا كانت تستهدف المستوى 23 من واجهة برمجة التطبيقات تحديدًا. للمساعدة في ضمان أفضل تجربة للمستخدمين، اختبِر تطبيقك في وضعَي "الاستراحة" و"تطبيقات وضع الاستعداد" وأجرِ أي تعديلات ضرورية على الرمز البرمجي. وتقدّم الأقسام التالية التفاصيل.
التعرّف على ميزة "قيلولة"
إذا ترك المستخدم الجهاز غير متصل بمصدر طاقة وثابتًا لفترة من الوقت، مع إيقاف الشاشة، يدخل الجهاز في وضع السكون. في وضع السكون، يحاول النظام الحفاظ على البطارية من خلال تقييد وصول التطبيقات إلى الشبكة والخدمات التي تستهلك وحدة المعالجة المركزية بشكل كبير. ويمنع أيضًا التطبيقات من الوصول إلى الشبكة ويؤجّل مهامها وعمليات المزامنة والمنبّهات العادية.
يخرج النظام من وضع Doze بشكل دوري لفترة قصيرة للسماح للتطبيقات بإكمال أنشطتها المؤجلة. خلال فترة الصيانة هذه، يشغّل النظام جميع عمليات المزامنة والمهام والمنبّهات المعلّقة، ويتيح للتطبيقات الوصول إلى الشبكة.
عند انتهاء فترة الصيانة، يدخل النظام مرة أخرى في وضع Doze، ويعلّق الوصول إلى الشبكة ويؤجل المهام والمزامنة والمنبهات. وبمرور الوقت، يجدول النظام فترات الصيانة بمعدل أقل، ما يساعد في تقليل استهلاك البطارية في حالات عدم النشاط الطويلة عندما لا يكون الجهاز قيد الشحن.
عندما ينشّط المستخدم الجهاز عن طريق تحريكه أو تشغيل الشاشة أو توصيل شاحن، يخرج النظام من وضع Doze وتستأنف جميع التطبيقات نشاطها العادي.
القيود المفروضة على وضع Doze
يطبّق النظام القيود التالية على تطبيقاتك أثناء وضع "الاستراحة":
- يتم تعليق الوصول إلى الشبكة.
- وتتجاهل عمليات قفل التنشيط.
- يؤجّل هذا الخيار المنبّهات العادية
AlarmManager، بما في ذلكsetExact()وsetWindow()، إلى نافذة الصيانة التالية.- إذا كنت بحاجة إلى ضبط منبّهات يتم تفعيلها أثناء تفعيل وضع "الاستراحة"، استخدِم
setAndAllowWhileIdle()أوsetExactAndAllowWhileIdle(). - ستستمر المنبّهات التي تم ضبطها باستخدام
setAlarmClock()في الرنين بشكل طبيعي. ويخرج النظام من وضع قيلولة قبل وقت قصير من انطلاق هذه المنبّهات.
- إذا كنت بحاجة إلى ضبط منبّهات يتم تفعيلها أثناء تفعيل وضع "الاستراحة"، استخدِم
- لا يتم إجراء عمليات بحث عن شبكات Wi-Fi.
- لا يسمح بتشغيل محوّلات المزامنة.
- لا يسمح بتشغيل
JobScheduler.
قائمة التحقّق من وضع "القيلولة"
- استخدِم "مراسلة Firebase السحابية" (FCM) للمراسلة الموجَّهة من الخادم إلى العميل، إن أمكن.
- إذا كان من الضروري أن يرى المستخدمون الإشعار على الفور، استخدِم نوع الرسالة
RemoteNotification. لمزيد من الإرشادات، يمكنك الرجوع إلى مستندات FCM حول نوع الرسالةRemoteNotification. - قدِّم معلومات كافية ضمن حمولة الرسالة الأولية، حتى لا يكون الوصول اللاحق إلى الشبكة ضروريًا.
- يمكنك ضبط المنبّهات المهمة باستخدام
setAndAllowWhileIdle()وsetExactAndAllowWhileIdle(). - اختبِر تطبيقك في وضع "الاستراحة".
تكييف تطبيقك مع وضع "الاستراحة"
يمكن أن يؤثر وضع قيلولة في التطبيقات بشكل مختلف، حسب الإمكانات التي توفّرها والخدمات التي تستخدمها. تعمل العديد من التطبيقات بشكل طبيعي خلال دورات "الاستراحة" بدون تعديل. في بعض الحالات، يجب تحسين طريقة إدارة تطبيقك للشبكة والمنبّهات والمهام وعمليات المزامنة. يجب أن تكون التطبيقات قادرة على إدارة الأنشطة بكفاءة خلال كل فترة صيانة.
للمساعدة في جدولة المنبّهات، يمكنك استخدام طريقتَين من AlarmManager: setAndAllowWhileIdle() وsetExactAndAllowWhileIdle(). باستخدام هذه الطرق، يمكنك ضبط المنبّهات
التي يتم تشغيلها حتى إذا كان الجهاز في وضع السكون.
من المرجّح أيضًا أن يؤثر تقييد ميزة "الاستراحة" للوصول إلى الشبكة في تطبيقك، خاصةً إذا كان التطبيق يعتمد على الرسائل في الوقت الفعلي، مثل الإشعارات أو التنبيهات. إذا كان تطبيقك يتطلب اتصالاً مستمرًا بالشبكة لتلقّي الرسائل، استخدِم مراسلة Firebase السحابية (FCM) إن أمكن.
للتأكّد من أنّ تطبيقك يعمل على النحو المتوقّع مع ميزة "الاستراحة"، يمكنك استخدام أوامر adb لفرض دخول النظام إلى وضع "الاستراحة" والخروج منه ومراقبة سلوك تطبيقك. لمعرفة التفاصيل، يُرجى الاطّلاع على مقالة الاختبار باستخدام ميزتَي "الاستراحة" و"تطبيقات وضع الاستعداد".
التعرّف على ميزة "تطبيقات وضع الاستعداد"
تتيح ميزة "تطبيقات وضع الاستعداد" للنظام تحديد أنّ التطبيق غير نشط عندما لا يستخدمه المستخدم بشكل نشط. يتّخذ النظام هذا القرار عندما لا يستخدم المستخدم التطبيق لفترة زمنية معيّنة ولا ينطبق أي من الشروط التالية:
- يُطلق المستخدم التطبيق صراحةً.
- يحتوي التطبيق على عملية قيد التشغيل حاليًا في المقدّمة، إما كنشاط أو خدمة تعمل في المقدّمة، أو قيد الاستخدام من خلال نشاط آخر أو خدمة أخرى تعمل في المقدّمة.
- ينشئ التطبيق إشعارًا يظهر للمستخدمين على شاشة القفل أو في لوحة الإشعارات.
عندما يوصّل المستخدم الجهاز بمصدر طاقة، يحرّر النظام التطبيقات من حالة الاستعداد، ما يتيح لها الوصول إلى الشبكة بحرية وتنفيذ أي مهام ومزامنَات معلّقة. إذا كان الجهاز غير نشط لفترات طويلة، يسمح النظام للتطبيقات غير النشطة بالوصول إلى الشبكة مرة واحدة تقريبًا في اليوم.
استخدام FCM للتفاعل مع تطبيقك عندما يكون الجهاز في وضع عدم النشاط
مراسلة Firebase السحابية (FCM) هي خدمة من السحابة الإلكترونية إلى الجهاز تتيح لك إرسال رسائل في الوقت الفعلي من خدمات الخلفية إلى التطبيقات على أجهزة Android. توفّر خدمة "مراسلة Firebase السحابية" اتصالاً واحدًا ومستمرًا بالسحابة الإلكترونية. ويمكن لجميع التطبيقات التي تحتاج إلى المراسلة في الوقت الفعلي مشاركة هذا الاتصال. يعمل هذا الاتصال المشترك على تحسين استهلاك البطارية بشكل كبير من خلال إلغاء الحاجة إلى احتفاظ تطبيقات متعددة باتصالاتها المستمرة المنفصلة، والتي يمكن أن تستنزف البطارية بسرعة. لهذا السبب، إذا كان تطبيقك يتطلب دمج المراسلة مع خدمة خلفية، ننصحك بشدة باستخدام FCM إن أمكن، بدلاً من الحفاظ على اتصالك المستمر بالشبكة.
تم تحسين خدمة "مراسلة Firebase السحابية" للعمل مع وضعَي السكون "قيلولة" و"تطبيقات وضع الاستعداد". يتيح لك نوع رسالة FCM
RemoteNotification تنشيط تطبيقك لجذب المستخدم. في وضعَي "الاستراحة" أو "تطبيقات وضع الاستعداد"، يسلّم النظام الرسالة ويمنح التطبيق إمكانية الوصول المؤقت إلى خدمات الشبكة وأقفال التنشيط الجزئية، ثم يعيد الجهاز أو التطبيق إلى حالة عدم النشاط. بالنسبة إلى الإشعارات التي تهمّ المستخدمين وتتطلّب اتخاذ إجراء عاجل،
ننصحك باستخدام أنواع رسائل RemoteNotification لتفعيل التسليم في وضع
"الاستراحة". ويمكن أن تؤدي هذه الرسائل إلى ظهور إشعارات. لمزيد من المعلومات، يُرجى الاطّلاع على
إرشادات FCM بشأن RemoteNotification.
بالنسبة إلى الرسائل التي لا تؤدي إلى ظهور إشعارات، مثل إبقاء محتوى التطبيق
محدَّثًا في الخلفية أو بدء عمليات مزامنة البيانات، استخدِم رسائل BackgroundSync FCM. هذه الرسائل ذات أولوية منخفضة عن قصد، وقد يتم تأخيرها أو
تقييدها لتحسين عمر بطارية الجهاز.
كأفضل ممارسة عامة، إذا كان تطبيقك يتطلب مراسلة من الخادم إلى العميل، استخدِم
FCM. إذا كان تطبيقك يستخدم حاليًا FCM، تأكَّد من أنّه يستخدم RemoteNotification
للرسائل التي تؤدي إلى ظهور إشعارات موجّهة للمستخدمين.
لا تستخدم RemoteNotification في الحالات التالية:
- عندما لا يتم عرض إشعار بالتأكيد
- لإرسال الرسائل التي تعدّل حالة التطبيق فقط على الفور، مثل إبقاء محتوى التطبيق محدّثًا في الخلفية أو بدء مزامنة البيانات
- كوسيلة لطلب منح الأذونات من المستخدم النهائي
دعم حالات الاستخدام الأخرى
تستطيع جميع التطبيقات تقريبًا دعم ميزة "قيلولة" من خلال إدارة الاتصال بالشبكة والمنبّهات والمهام وعمليات المزامنة، وباستخدام رسائل مراسلة Firebase السحابية. بالنسبة إلى مجموعة ضيقة من حالات الاستخدام، قد لا يكون هذا كافيًا. في هذه الحالات، يوفّر النظام قائمة قابلة للضبط بالتطبيقات التي يتم استثناؤها جزئيًا من تحسينات "وضع السكون" و"تطبيقات وضع الاستعداد".
يمكن للتطبيق الذي تم إعفاؤه جزئيًا استخدام الشبكة والاحتفاظ بعمليات قفل التنشيط الجزئية أثناء وضعَي "الاستراحة" و"تطبيقات وضع الاستعداد". ومع ذلك، لا تزال هناك قيود أخرى تنطبق
على التطبيق، تمامًا كما تنطبق على التطبيقات الأخرى. على سبيل المثال، يتم تأجيل مهام التطبيق وعمليات المزامنة
على مستوى واجهة برمجة التطبيقات 23 والإصدارات الأقدم، ولا يتم تشغيل
AlarmManager المنبّهات العادية. يمكن للتطبيق التحقّق مما إذا كان مدرجًا حاليًا في قائمة الإعفاء من خلال استدعاء isIgnoringBatteryOptimizations().
يمكن للمستخدمين ضبط قائمة التطبيقات المستثناة يدويًا من خلال الإعدادات > البطارية > تحسين البطارية. بدلاً من ذلك، يوفّر النظام طرقًا تتيح للتطبيقات أن تطلب من المستخدمين استثناءها:
- يمكن لمعظم التطبيقات استدعاء intent يحتوي على
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS. - يمكن للتطبيقات التي تستوفي حالة استخدام مقبولة
استدعاء intent يحتوي على إجراء intent
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSللسماح للمستخدم بإضافة التطبيق إلى قائمة الاستثناءات مباشرةً، بدون الانتقال إلى إعدادات النظام.
يمكن لأي تطبيق التحقّق مما إذا كان مدرجًا حاليًا في قائمة الإعفاء من خلال طلب
isIgnoringBatteryOptimizations().
الاختبار باستخدام ميزتَي "الاستراحة" و"تطبيقات وضع الاستعداد"
لضمان حصول المستخدمين على تجربة رائعة، اختبِر تطبيقك بالكامل في وضعَي "قيلولة" و"تطبيقات وضع الاستعداد".
اختبار تطبيقك باستخدام ميزة "الاستراحة"
يمكنك اختبار وضع "الاستراحة" باتّباع الخطوات التالية:
- اضبط جهازًا أو جهازًا افتراضيًا باستخدام صورة نظام Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو إصدار أحدث.
- وصِّل الجهاز بجهاز التطوير وثبِّت تطبيقك.
- شغِّل تطبيقك واتركه نشطًا.
- افرض على النظام الدخول في وضع عدم النشاط من خلال تنفيذ الأمر التالي:
$ adb shell dumpsys deviceidle force-idle - عندما تصبح جاهزًا، اخرج من وضع عدم النشاط من خلال تنفيذ الأمر التالي:
$ adb shell dumpsys deviceidle unforce - أعِد تفعيل الجهاز من خلال تنفيذ الأمر التالي:
$ adb shell dumpsys battery reset - راقِب سلوك تطبيقك بعد إعادة تفعيل الجهاز. تأكَّد من أنّ التطبيق يستعيد نشاطه بشكل سلس عندما يخرج الجهاز من وضع "الاستراحة".
اختبار تطبيقك باستخدام ميزة "تطبيقات وضع الاستعداد"
لاختبار وضع "تطبيقات وضع الاستعداد" مع تطبيقك، اتّبِع الخطوات التالية:
- اضبط جهازًا أو جهازًا افتراضيًا باستخدام صورة نظام Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو إصدار أحدث.
- وصِّل الجهاز بجهاز التطوير وثبِّت تطبيقك.
- شغِّل تطبيقك واتركه نشطًا.
- فرض تشغيل التطبيق في وضع "تطبيقات وضع الاستعداد" من خلال تنفيذ الأوامر التالية:
$ adb shell dumpsys battery unplug $ adb shell am set-inactive <packageName> true - يمكنك محاكاة تنشيط تطبيقك باستخدام الأوامر التالية:
$ adb shell am set-inactive <packageName> false $ adb shell am get-inactive <packageName> - راقِب سلوك تطبيقك بعد تنشيطه. تأكَّد من أنّ التطبيق يستأنف العمل بشكل سلس من وضع الاستعداد. وعلى وجه الخصوص، تحقَّق مما إذا كانت إشعارات تطبيقك والمهام التي ينفّذها في الخلفية تعمل على النحو المتوقّع.
حالات الاستخدام المقبولة للإعفاء
يوضّح الجدول التالي عدة حالات استخدام وما إذا كان من المقبول
أن تستخدم التطبيقات إجراء intent ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
في هذه الحالات. بشكل عام، لا يستوفي تطبيقك هذه الاستثناءات ما لم يؤدِّ وضع "قيلولة" أو "تطبيقات وضع الاستعداد" إلى تعطيل الوظيفة الأساسية للتطبيق أو كان هناك سبب فني يمنع تطبيقك من استخدام رسائل RemoteNotification في "مراسلة Firebase السحابية".
لمزيد من المعلومات، يُرجى الاطّلاع على الدعم لحالات الاستخدام الأخرى.
| النوع | حالة الاستخدام | هل يمكن استخدام FCM؟ | هل الإعفاء مقبول؟ | ملاحظات |
|---|---|---|---|---|
| تطبيقات المراسلة الفورية أو المحادثة أو الاتصال | يتطلّب تسليم الرسائل في الوقت الفعلي للمستخدمين عندما يكون الجهاز في وضع السكون أو التطبيق في وضع الاستعداد. | نعم، باستخدام FCM | غير مقبول | استخدِم رسائل FCM RemoteNotification لتنشيط التطبيق والوصول إلى
الشبكة. |
نعم، ولكن لا يتم استخدام رسائل FCM RemoteNotification. |
||||
| تطبيقات المراسلة الفورية أو المحادثة أو الاتصال، وتطبيقات الاتصال عبر بروتوكول الإنترنت (VOIP) للمؤسسات | لا، لا يمكن استخدام خدمة "مراسلة Firebase السحابية" بسبب الاعتمادية الفنية على خدمة مراسلة أخرى أو لأنّ ميزتَي "قيلولة" و"تطبيقات وضع الاستعداد" تؤديان إلى تعطيل الوظيفة الأساسية للتطبيق. | مقبول | ||
| تطبيق "الأمن الشخصي" | تطبيقات تحافظ على أمان المستخدمين وعائلاتهم | إذا كان ذلك منطبقًا. | مقبول | |
| تطبيق لأتمتة المهام | تتمثّل الوظيفة الأساسية للتطبيق في جدولة الإجراءات المبرمَجة، مثل المراسلة الفورية أو المكالمات الصوتية أو إدارة الصور الجديدة. | إذا كان ذلك منطبقًا. | مقبول | |
| تطبيق مصاحب للأجهزة الملحقة | تتمثّل الوظيفة الأساسية للتطبيق في الحفاظ على اتصال مستمر مع الجهاز الملحق بغرض توفير إمكانية الوصول إلى الإنترنت للجهاز الملحق. | إذا كان ذلك منطبقًا. | مقبول | |
| يحتاج التطبيق فقط إلى الاتصال بجهاز ملحق بشكل دوري للمزامنة، أو يحتاج فقط إلى الاتصال بالأجهزة، مثل سماعات الرأس اللاسلكية، المتصلة عبر ملفات تعريف البلوتوث العادية. | إذا كان ذلك منطبقًا. | غير مقبول |