تحسين إعدادات القيلولة ووضع الاستعداد

يحتوي Android على ميزتين لتوفير الطاقة، وهما ميزة "القيلولة" و"تطبيقات وضع الاستعداد" لإطالة عمر البطارية للمستخدمين من خلال إدارة سلوك التطبيقات عندما لا يكون الجهاز متصلاً بمصدر طاقة. تقلِّل ميزة القيلولة من استهلاك البطارية من خلال تأجيل نشاط وحدة المعالجة المركزية (CPU) والشبكة في الخلفية عند عدم استخدام الجهاز لفترات زمنية طويلة. يؤجِّل تطبيقات الاستعداد نشاط الشبكة في الخلفية للتطبيقات التي لم تسجّل أي نشاط حديث للمستخدمين.

أثناء وضع الجهاز في وضع "القيلولة"، يتم تأجيل وصول التطبيقات إلى بعض الموارد التي تستهلك قدرًا كبيرًا من طاقة البطارية إلى أن تظهر نافذة الصيانة. يتم إدراج القيود المحددة في قيود إدارة الطاقة.

يعمل تطبيقا القيلولة وتطبيقات وضع الاستعداد على إدارة سلوك جميع التطبيقات التي تعمل بنظام التشغيل Android 6.0 أو الإصدارات الأحدث، بغض النظر عما إذا كانت تستهدف مستوى واجهة برمجة التطبيقات 23 على وجه التحديد أم لا. للمساعدة في ضمان تقديم أفضل تجربة للمستخدمين، اختبِر تطبيقك في وضعَي "القيلولة" و"تطبيقات الاستعداد" وأجرِ أي تعديلات ضرورية على الرمز. تقدم الأقسام التالية التفاصيل.

فهم القيلولة

إذا ترك المستخدم جهازًا غير متصل بمصدر الطاقة وأصبح ثابتًا لفترة من الوقت، مع إيقاف الشاشة، يدخل الجهاز في وضع "القيلولة". في وضع القيلولة، يحاول النظام الحفاظ على طاقة البطارية من خلال تقييد وصول التطبيقات إلى الخدمات التي تستهلك قدرًا كبيرًا من بيانات الشبكة ووحدة المعالجة المركزية (CPU). كما أنه يمنع التطبيقات من الوصول إلى الشبكة ويؤجل وظائفها ومزامناتها والمنبّهات العادية.

بشكل دوري، يخرج النظام من ميزة Doze لفترة قصيرة للسماح للتطبيقات بإكمال أنشطتها المؤجَّلة. خلال نافذة الصيانة هذه، يشغِّل النظام جميع عمليات المزامنة والمهام والمنبهات المعلَّقة، ويسمح للتطبيقات بالوصول إلى الشبكة.

الشكل 1. توفِّر ميزة "القيلولة" نافذة صيانة متكررة للتطبيقات بهدف استخدام الشبكة والتعامل مع الأنشطة المعلَّقة.

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

عندما ينشِّط المستخدم الجهاز عن طريق تحريكه أو تشغيل الشاشة أو توصيل شاحن، يخرج النظام من القيلولة وتستأنف جميع التطبيقات النشاط العادي.

قيود القيلولة

يطبّق النظام القيود التالية على تطبيقاتك أثناء استخدام ميزة "القيلولة":

  • يعلّق الوصول إلى الشبكة.
  • وتتجاهل عمليات قفل التنشيط.
  • يتم تأجيل المنبّهات AlarmManager العادية، بما في ذلك setExact() وsetWindow()، إلى نافذة الصيانة التالية.
    • إذا كنت بحاجة إلى ضبط منبّهات تعمل أثناء استخدام ميزة "القيلولة"، استخدِم السمة setAndAllowWhileIdle() أو السمة setExactAndAllowWhileIdle().
    • ويستمر تنشيط المنبّهات المضبوطة باستخدام setAlarmClock() بشكل طبيعي. يخرج النظام من ميزة "القيلولة" قبل وقت قصير من تنشيط تلك المنبّهات.
  • لا يجري عمليات البحث عن شبكات Wi-Fi.
  • لا يسمح بتشغيل محوّلات المزامنة.
  • لا يسمح النطاق JobScheduler بالتشغيل.

قائمة التحقّق الخاصة بقيلولة

تكييف تطبيقك مع وضع القيلولة

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

للمساعدة في تحديد مواعيد المنبّهات، يمكنك استخدام طريقتين من نوع AlarmManager: setAndAllowWhileIdle() وsetExactAndAllowWhileIdle(). بهذه الطرق، يمكنك ضبط تنبيهات يتم تنشيطها حتى لو كان الجهاز في وضع "القيلولة".

من المحتمل أيضًا أن يؤثر قيد القيلولة المفروض على الوصول إلى الشبكة على تطبيقك، خاصةً إذا كان التطبيق يعتمد على رسائل في الوقت الفعلي، مثل الدجاجة أو الإشعارات. إذا كان تطبيقك يتطلّب اتصالاً مستمرًا بالشبكة لتلقّي الرسائل، استخدِم ميزة المراسلة عبر السحابة الإلكترونية من Firebase (FCM) إذا أمكن ذلك.

للتأكُّد من أنّ تطبيقك يعمل على النحو المتوقّع مع ميزة Doze، يمكنك استخدام أوامر adb لإجبار النظام على الدخول إلى ميزة "القيلولة" والخروج منها وملاحظة سلوك تطبيقك. لمعرفة التفاصيل، يُرجى الاطّلاع على الاختبار باستخدام ميزة "القيلولة" و"تطبيقات وضع الاستعداد".

التعرّف على وضع الاستعداد للتطبيقات

يتيح تطبيق وضع الاستعداد للنظام تحديد أن التطبيق يكون غير نشِط لفترة قصيرة من الوقت الذي لا يستخدمه المستخدم بنشاط. ويتخذ النظام هذا القرار عندما لا يلمس المستخدم التطبيق لفترة زمنية معينة ولا ينطبق أي من الحالات التالية:

  • يقوم المستخدم بتشغيل التطبيق بشكل صريح.
  • يحتوي التطبيق على عملية تعمل حاليًا في المقدّمة، إما كنشاط أو خدمة تعمل في المقدّمة أو قيد الاستخدام من قِبل نشاط آخر أو خدمة تعمل في المقدّمة.
  • ينشئ التطبيق إشعارًا يظهر للمستخدمين على شاشة القفل أو في قائمة الإشعارات.

عندما يوصّل المستخدم الجهاز بمصدر طاقة، يصدر النظام التطبيقات في حالة الاستعداد، ما يتيح لهم الوصول بحرية إلى الشبكة وتنفيذ أي مهام في انتظار المراجعة وعمليات مزامنة. وإذا كان الجهاز غير نشِط لفترة زمنية طويلة، يسمح النظام للتطبيقات غير النشطة بالوصول إلى الشبكة حوالي مرة واحدة في اليوم.

استخدام خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" للتفاعل مع تطبيقك عندما يكون الجهاز غير نشِط لفترة قصيرة

المراسلة عبر السحابة الإلكترونية من Firebase (FCM) هي خدمة يتم تحويلها إلى السحابة الإلكترونية من جهاز إلى آخر وتتيح لك إمكانية استخدام الرسائل في الوقت الفعلي بين خدمات الخلفية والتطبيقات على أجهزة Android. توفّر خدمة FCM اتصالاً واحدًا مستمرًا بالسحابة الإلكترونية. يمكن لجميع التطبيقات التي تحتاج إلى مراسلة في الوقت الفعلي مشاركة هذا الاتصال. يؤدي هذا الاتصال المشترك إلى تحسين استهلاك البطارية بشكل كبير من خلال جعل من غير الضروري لعدة تطبيقات الحفاظ على الاتصالات المستمرة الخاصة بها والمنفصلة، ما قد يستنزف طاقة البطارية بسرعة. لهذا السبب، إذا كان تطبيقك يتطلب دمج المراسلة مع خدمة خلفية، نقترح بشدة استخدام خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" إن أمكن، بدلاً من الحفاظ على اتصالك الدائم بالشبكة.

تم تحسين خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" للتوافق مع وضعَي الخمول "قيلولة" و"تطبيقات وضع الاستعداد". تتيح لك الرسائل ذات الأولوية العالية في FCM تنشيط تطبيقك للتفاعل مع المستخدم. في وضع "القيلولة" أو "وضع الاستعداد للتطبيقات"، يسلِّم النظام الرسالة ويمنح التطبيق إذنًا بالوصول مؤقتًا إلى خدمات الشبكة وعمليات قفل التنشيط الجزئية، ثم يعيد الجهاز أو التطبيق إلى حالة عدم النشاط. بالنسبة إلى الإشعارات الحساسة للوقت والتي تكون مرئية للمستخدم، جرّب استخدام الرسائل ذات الأولوية العالية لتمكين التسليم في وضع "القيلولة". يمكن أن تؤدي الرسائل ذات الأولوية العالية إلى ظهور إشعارات. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على إرشادات "المراسلة عبر السحابة الإلكترونية من Firebase" حول الرسائل ذات الأولوية العالية.

بالنسبة إلى الرسائل التي لا تؤدي إلى تلقّي إشعارات، مثل إبقاء محتوى التطبيق محدّثًا في الخلفية أو بدء عمليات مزامنة البيانات، استخدِم رسائل المراسلة عبر السحابة الإلكترونية من Firebase العادية ذات الأولوية. ويتم تسليم الرسائل ذات الأولوية العادية فورًا إذا لم يكن الجهاز في وضع القيلولة. إذا كان الجهاز في وضع القيلولة، يتم تسليمه خلال نوافذ صيانة قيلولة الدورية أو فور تنشيط المستخدم للجهاز.

كإحدى أفضل الممارسات العامة، إذا كان تطبيقك يتطلب خدمة مراسلة عبر السحابة الإلكترونية، استخدِم ميزة "المراسلة عبر السحابة الإلكترونية من Firebase". إذا كان تطبيقك يستخدم "المراسلة عبر السحابة الإلكترونية من Firebase" في الوقت الحالي، تأكّد من أنّه لا يستخدم سوى الرسائل ذات الأولوية العالية فقط للرسائل التي تنتج عنها إشعارات موجّهة للمستخدم.

دعم حالات الاستخدام الأخرى

تستطيع كل التطبيقات تقريبًا إتاحة استخدام تطبيق Doze عن طريق إدارة إمكانية الاتصال بالشبكة والمنبّهات والمهام وعمليات المزامنة، وكذلك استخدام رسائل المراسلة عبر السحابة الإلكترونية من Firebase. بالنسبة لمجموعة ضيقة من حالات الاستخدام، قد لا يكون هذا كافيًا. بالنسبة لمثل هذه الحالات، يوفر النظام قائمة قابلة للضبط بالتطبيقات المعفاة جزئيًا من تحسينات القيلولة وتطبيقات وضع الاستعداد.

يمكن للتطبيق المعفى جزئيًا استخدام الشبكة وضبط عمليات قفل تفعيل جزئية أثناء "قيلولة" و"تطبيقات وضع الاستعداد". ومع ذلك، لا تزال القيود الأخرى تنطبق على التطبيق، تمامًا كما تنطبق على التطبيقات الأخرى. على سبيل المثال، يتم تأجيل مهام التطبيق ومزامنته على المستوى 23 من واجهة برمجة التطبيقات والمستويات الأدنى، ولا يتم تنشيط منبّهات AlarmManager العادية. يمكن لأي تطبيق التحقق مما إذا كان مدرَجًا في قائمة الإعفاء حاليًا من خلال الاتصال على isIgnoringBatteryOptimizations().

يمكن للمستخدمين ضبط قائمة التطبيقات المستثناة يدويًا من خلال الانتقال إلى الإعدادات > البطارية > تحسين البطارية. بدلاً من ذلك، يوفر النظام طرقًا للتطبيقات لتطلب من المستخدمين استثناءها:

يمكن لأي تطبيق التحقق مما إذا كان مدرجًا حاليًا في قائمة الإعفاءات من خلال الاتصال على isIgnoringBatteryOptimizations().

الاختبار باستخدام ميزة "القيلولة" و"وضع الاستعداد" للتطبيق

للمساعدة في ضمان تقديم تجربة رائعة للمستخدمين، اختبِر تطبيقك بالكامل في القيلولة وتطبيقات وضع الاستعداد.

اختبار تطبيقك باستخدام ميزة "القيلولة"

يمكنك تجربة وضع القيلولة عن طريق تنفيذ ما يلي:

  1. عليك إعداد جهاز أو جهاز افتراضي باستخدام صورة نظام Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو صورة نظام أعلى.
  2. اربط الجهاز بجهاز التطوير وثبِّت تطبيقك.
  3. شغِّل تطبيقك واتركه نشطًا.
  4. افرض على النظام في وضع عدم النشاط لفترة قصيرة من خلال تشغيل الأمر التالي:
        $ adb shell dumpsys deviceidle force-idle
        
  5. عندما تكون جاهزًا، يمكنك الخروج من "وضع عدم النشاط" من خلال تنفيذ الأمر التالي:
        $ adb shell dumpsys deviceidle unforce
        
  6. يُرجى إعادة تفعيل الجهاز من خلال تنفيذ الأمر التالي:
        $ adb shell dumpsys battery reset
        
  7. راقِب سلوك تطبيقك بعد إعادة تفعيل الجهاز. تأكّد من أنّ التطبيق يتعافى على نحو سليم عند خروج الجهاز من ميزة "القيلولة".

اختبار التطبيق باستخدام ميزة "وضع الاستعداد"

لاختبار وضع الاستعداد للتطبيق باستخدام تطبيقك، عليك إجراء ما يلي:

  1. عليك إعداد جهاز أو جهاز افتراضي باستخدام صورة نظام Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو صورة نظام أعلى.
  2. اربط الجهاز بجهاز التطوير وثبِّت تطبيقك.
  3. شغِّل تطبيقك واتركه نشطًا.
  4. يمكنك فرض تشغيل التطبيق في وضع الاستعداد عن طريق تشغيل الأوامر التالية:
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. يمكنك محاكاة تنشيط تطبيقك باستخدام الأوامر التالية:
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. مراقبة سلوك تطبيقك بعد تنشيطه. عليك التأكُّد من أنّ التطبيق يستعيد تمامًا وضع الاستعداد. وعلى وجه الخصوص، يجب التحقّق مما إذا كانت الإشعارات والمهام في الخلفية تعمل على النحو المتوقّع.

حالات الاستخدام المقبولة للإعفاء

يوضِّح الجدول التالي العديد من حالات الاستخدام وما إذا كان من المقبول أن تستخدم التطبيقات إجراء ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS في هذه الحالات. بصورة عامة، لا يستوفي تطبيقك هذه الاستثناءات إلا إذا تعطلت ميزة "القيلولة" أو "وضع الاستعداد" للتطبيق أو كان هناك سبب فني يمنع التطبيق من استخدام الرسائل ذات الأولوية العالية من خلال ميزة "المراسلة عبر السحابة الإلكترونية من Firebase".

لمزيد من المعلومات، يمكنك الاطّلاع على صفحة دعم حالات الاستخدام الأخرى.

Type حالة الاستخدام هل يمكن استخدام خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"؟ هل الإعفاء مقبول؟ Notes
تطبيق المراسلة الفورية أو المحادثة أو الاتصال يتطلب هذا الإعداد تسليم الرسائل في الوقت الفعلي إلى المستخدمين عندما يكون الجهاز في وضع القيلولة أو عندما يكون التطبيق في وضع الاستعداد. نعم، باستخدام خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" غير مقبول استخدام الرسائل ذات الأولوية العالية في خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" لتنشيط التطبيق والوصول إلى الشبكة.
نعم، ولكن لا يستخدم الرسائل ذات الأولوية العالية للمراسلة عبر السحابة الإلكترونية من Firebase.
تطبيق للمراسلة الفورية أو الدردشة أو الاتصال، أو تطبيقات بروتوكول الصوت على الإنترنت للمؤسسات لا، لا يمكن استخدام خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" بسبب الاعتماد الفني على خدمة مراسلة أخرى، أو أنّ ميزة "القيلولة" و"وضع الاستعداد للتطبيقات" تعطّل الوظيفة الأساسية للتطبيق. مقبول
تطبيق "الأمن الشخصي" التطبيقات التي تحافظ على أمان المستخدمين وعائلاتهم إذا كان ذلك منطبقًا. مقبول
تطبيق التشغيل الآلي للمهام. تكمن الوظيفة الأساسية للتطبيق في جدولة الإجراءات الآلية، مثل الرسائل الفورية أو المكالمات الصوتية أو إدارة الصور الجديدة. إذا كان ذلك منطبقًا. مقبول
التطبيق المصاحب للأجهزة الملحقة الوظيفة الأساسية للتطبيق هي الحفاظ على اتصال دائم بالجهاز الملحق بهدف توفير اتصال بالإنترنت على الأجهزة الملحقة. إذا كان ذلك منطبقًا. مقبول
يحتاج التطبيق فقط إلى الاتصال بجهاز ملحق بشكل دوري لمزامنته، أو يحتاج فقط إلى الاتصال بالأجهزة، مثل سماعات الرأس اللاسلكية التي تكون متصلة عبر الملفات الشخصية العادية الخاصة بالبلوتوث. إذا كان ذلك منطبقًا. غير مقبول