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

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

حِزم الأولوية

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

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

مجموعات الأولوية هي كما يلي:

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

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

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

نشط

يتم وضع التطبيق في الحزمة النشطة أثناء استخدامه أو استخدامه مؤخرًا أو عند تنفيذه أيّ من الإجراءات التالية:

  • يُطلق نشاطًا.
  • تشغيل خدمة تعمل في المقدّمة لفترة طويلة
  • يتم النقر عليه من قِبل المستخدم من إشعار.

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

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

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

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

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

  • ينقر المستخدم على إشعار يرسله تطبيقك.

  • يتفاعل المستخدم مع خدمة تعمل في المقدّمة في تطبيقك من خلال النقر على زر وسائط.

  • يتصل المستخدم بتطبيقك أثناء التفاعل مع نظام التشغيل Android Automotive، حيث يستخدم تطبيقك إما خدمة تعمل في المقدّمة أو CONNECTION_TYPE_PROJECTION.

مجموعة العمل

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

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

متكررة

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

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

نادرة

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

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

محظور

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

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

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

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

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

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

الاستثناءات من الحزمة المحظورة

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

تقييم مجموعة الأولوية

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

  • اتّصِل بالرقم getAppStandbyBucket().

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

    adb shell am get-standby-bucket PACKAGE_NAME

يقلّل النظام من سرعة تطبيقك كلما تم وضعه في "حزمة التطبيقات في وضع الاستعداد" التي تزيد قيمتها عن STANDBY_BUCKET_ACTIVE (10).

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

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

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

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

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