حِزم "تطبيقات في وضع الاستعداد"

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

صناديق الأولوية

يُعيِّن النظام ديناميكيًا كل تطبيق لصندوق أولوية، ويعيد تعيين التطبيقات حسب الحاجة. قد يعتمد النظام على تطبيق محمَّل مسبقًا يستخدم تعلُّم الآلة لتحديد مدى احتمال استخدام كل تطبيق، ويُعيِّن التطبيقات للصناديق المناسبة.

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

في ما يلي صناديق الأولوية:

  • نشط: يتم استخدام التطبيق أو تم استخدامه مؤخرًا.
  • مجموعة التطبيقات المستخدمة: يتم استخدام التطبيق بانتظام.
  • متكرر: يتم استخدام التطبيق غالبًا ولكن ليس يوميًا.
  • نادر: لا يتم استخدام التطبيق بشكل متكرر.
  • محظور: يستهلك التطبيق الكثير من موارد النظام أو قد يُظهر سلوكًا غير مرغوب فيه.

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

تنطبق الأوصاف التالية على الحالة غير المستندة إلى التنبؤ. في المقابل، عندما يستخدم التنبؤ تعلُّم الآلة لتوقّع السلوك، يتم اختيار الصناديق تحسّبًا للإجراءات التالية للمستخدم بدلاً من استنادها إلى الاستخدام الأخير. على سبيل المثال، قد يتم وضع تطبيق تم استخدامه مؤخرًا في صندوق "نادر" لأنّ تعلُّم الآلة يتوقّع أنّه قد لا يتم استخدام التطبيق لعدة ساعات.

نشط

يكون التطبيق في صندوق نشط أثناء استخدامه أو إذا تم استخدامه مؤخرًا أو عندما ينفّذ أيًا مما يلي:

  • بدء نشاط
  • تشغيل خدمة تعمل في المقدّمة لفترة طويلة
  • نقر المستخدم على إشعار

إذا كان التطبيق في صندوق "نشط"، يفرض النظام قيودًا قليلة على مهام التطبيق أو المنبّهات:

  • بدءًا من Android 16 (مستوى واجهة برمجة التطبيقات 36)، تحصل المهام التي تعمل في الخلفية على حصة كبيرة من وقت التشغيل إذا بدأها تطبيق في صندوق "نشط". ويشمل ذلك المهام المجدولة مباشرةً باستخدام JobScheduler، بالإضافة إلى المهام التي تنشئها مكتبات أخرى مثل WorkManager أو DownloadManager.

تفاعل المستخدم يعيِّن التطبيقات على أنّها نشطة

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

في ما يلي أمثلة على التفاعلات التي تؤدي إلى هذا السلوك في النظام:

مجموعة التطبيقات المستخدمة

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

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

متكررة

يكون التطبيق في صندوق متكرر إذا كان يتم استخدامه بانتظام ولكن ليس بالضرورة كل يوم. على سبيل المثال، قد يكون تطبيق تتبُّع التمارين الرياضية الذي يشغّله المستخدم في صالة الألعاب الرياضية في صندوق "متكرر".

إذا كان التطبيق في صندوق "متكرر"، يفرض النظام قيودًا أقوى على قدرته على تشغيل المهام وتفعيل المنبّهات. لمعرفة التفاصيل، يُرجى الاطّلاع على الحدود القصوى لموارد إدارة الطاقة.

نادر

يكون التطبيق في صندوق نادر إذا لم يتم استخدامه غالبًا. على سبيل المثال، قد يكون تطبيق فندق لا يشغّله المستخدم إلا أثناء الإقامة في ذلك الفندق في صندوق "نادر".

إذا كان التطبيق في صندوق "نادر"، يفرض النظام قيودًا صارمة على قدرته على تشغيل المهام وتفعيل المنبّهات. يفرض النظام أيضًا قيودًا على قدرة التطبيق على الاتصال بالإنترنت. لمعرفة التفاصيل، يُرجى الاطّلاع على الحدود القصوى لموارد إدارة الطاقة.

محظور

يحتوي هذا الصندوق، الذي تمت إضافته في Android 12 (مستوى واجهة برمجة التطبيقات 31)، على أدنى أولوية وأعلى القيود بين جميع الصناديق. يأخذ النظام في الاعتبار سلوك تطبيقك، مثل عدد مرّات تفاعل المستخدم معه، ليقرّر ما إذا كان سيضع تطبيقك في صندوق "محظور".

في Android 13 (مستوى واجهة برمجة التطبيقات 33) والإصدارات الأحدث، ما لم يستوفِ تطبيقك شروط الـ إعفاء، يضعه النظام في صندوق "محظور" في الـ حالات التالية:

  • لا يتفاعل المستخدم مع تطبيقك لعدد معيّن من الأيام. في Android 12 (المستوى 31 من واجهة برمجة التطبيقات) و12L (المستوى 32 من واجهة برمجة التطبيقات)، يكون عدد الأيام 45. يقلّل Android 13 عدد الأيام إلى 8.

  • يستدعي تطبيقك عددًا مفرطًا من عمليات البث أو عمليات الربط خلال فترة 24 ساعة.

إذا وضع النظام تطبيقك في صندوق "محظور"، تنطبق القيود التالية:

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

الإعفاءات من صندوق "محظور"

يتم إعفاء أنواع التطبيقات التالية من الدخول إلى صندوق "محظور" وتتجاوز مشغّل عدم النشاط، حتى على Android 12 والإصدارات الأحدث:

تقييم صندوق الأولوية

لمعرفة الصندوق الذي تم تعيين تطبيقك إليه، نفِّذ أحد الإجراءَين التاليَين:

  • استدعاء getAppStandbyBucket().

  • تشغيل الأمر التالي في نافذة الوحدة الطرفية:

    adb shell am get-standby-bucket PACKAGE_NAME

يفرض النظام قيودًا على تطبيقك كلما تم وضعه في صندوق تطبيقات وضع الاستعداد الذي تكون قيمته أكبر من STANDBY_BUCKET_ACTIVE ‏ (10).

أفضل الممارسات

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

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

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

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