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

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

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

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

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

في ما يلي مجموعات الأولويات:

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

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

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

نشط

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

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

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

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

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

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

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

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

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

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

مجموعة العمل

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

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

متكررة

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

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

إنجاز نادر

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

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

محظور

هذه المجموعة، التي تمت إضافتها في الإصدار 12 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 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).

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

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

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

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

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