يُثبِّت مستخدم Android العادي أكثر من 50 تطبيقًا على أجهزته (يزداد العدد مع زيادة مستوى ذاكرة الوصول العشوائي (RAM) في الأجهزة). ومع ذلك، لا يستخدم المستخدم عددًا كبيرًا من هذه التطبيقات لفترة طويلة من الوقت.
تؤدي ميزة "إسبات التطبيقات" إلى إسبات التطبيقات التي لم يستخدمها المستخدم لبضعة أشهر، وهي تشبه ميزة "الإلغاء التلقائي للأذونات". يؤدي ذلك إلى فرض إيقاف التطبيق ووضعه في حالة يتم فيها تحسين مساحة التخزين بدلاً من الأداء. يتم أيضًا تجميع ميزة الإبطال التلقائي للأذونات مع هذه الحالة، ويشتركان في إعداد الإعفاء نفسه في الإعدادات. لا يشغّل التطبيق الذي تم إيقافه بالقوة مهام أو تنبيهات في الخلفية، ولا يمكنه إرسال إشعارات فورية. وعندما يعاود المستخدم استخدام التطبيق، يخرج التطبيق من وضع الإسبات ويتم تشغيل المهام/التنبيهات/الإشعارات مرة أخرى كالمعتاد. يجب إعادة جدولة أي مهام أو تنبيهات أو إشعارات تم تحديد موعد لها قبل أن يدخل التطبيق في وضع الإسبات.
قد يتعارض تعديل المصنّعين الأصليين للجهاز على النظام الأساسي مع عملية تنفيذ ميزة "إسبات التطبيق". على سبيل المثال
- قد يؤدي تعديل تعريف استخدام التطبيق أو تقديم طرق لتنشيط تطبيق غير متوفّرة في مشروع Android المفتوح المصدر (AOSP) إلى التأثير في دقة ميزة "وضع التطبيقات في وضع السكون".
- قد تؤدي آلية الحظر الخاصة بمصنّع المعدات الأصلية، والتي تشبه ميزة "وضع السكون للتطبيقات"، غرضًا مشابهًا. وعلى الرغم من إمكانية وجود كليهما، قد يكون هناك بعض التداخل بينهما.
يحدّد مستند تعريف التوافق مجموعة جديدة من المتطلبات للتغييرات المستندة إلى استخدام التطبيق، على غرار المتطلب الحالي 3.5.1. يجب أن يستوفي التطبيق المتطلبات التالية لكي يتم تفعيل ميزة "وضع السكون" فيه.
يتم تخزين رمز إطار العمل في:
- repo: platform/frameworks/base
- الدليل: services/core/java/com/android/server/apphibernation
يتوفّر منطق السياسة في:
- repo: platform/packages/modules/Permission
- directory: PermissionController/src/com/android/permissioncontroller/hibernation
البنية العالية المستوى
تعمل خدمة نظام "وضع السكون للتطبيقات" على تحسين التطبيقات التي لا يستخدمها المستخدم كثيرًا من أجل توفير مساحة التخزين، كما تمنع هذه التطبيقات من العمل في الخلفية. لتحقيق هذه النتائج، عندما نضع تطبيقًا في وضع السكون، فإننا ننفّذ ما يلي على وجه التحديد:
- الإلغاء التلقائي للأذونات
- فرض إيقاف التطبيق
- حذف ملفات ODEX وVDEX
- حذف ذاكرة التخزين المؤقت للتطبيق
هدفنا هو تنفيذ وضع السكون كإجراء يمكن الرجوع عنه، حتى يظل التطبيق متاحًا للمستخدم من خلال "مشغّل التطبيقات" والواجهات الأخرى مع الحفاظ على بيانات التطبيق. عند تشغيل التطبيق، سنعيد حالته إلى ما كانت عليه قبل إيقافه بالقوة، وسنواصل إنشاء ملفَي ODEX وVDEX كالمعتاد.
يرتكز التصميم المخطّط له على جزأين رئيسيَّين:
- تحديد وقت وضع الحزمة في وضع السكون
- تحسين الحزمة في وضع الإسبات
تتولّى خدمة تابعة لنظام التشغيل جديدة، AppHibernationService، وخدمة مهام، AppHibernationJobService,، في PermissionController مهمة الربط التي تتحكّم في عملية اتخاذ القرارات والمنطق بشكل عام.
يتم تحديد وقت وضع الحزمة في وضع السكون بشكل أساسي من خلال UsageStatsService وتتم إدارته بواسطة AppHibernationJobService في PermissionController. تتوفّر منطق هذه السياسة في PermissionController
لإتاحة تعديلها ديناميكيًا من خلال Mainline. بالإضافة إلى ذلك، نخطّط لإضافة إشارة جديدة، وهي استخدام المكوّنات، لتسجيل استخدام مكوّنات الحزمة (مثل الخدمات وموفّري المحتوى) كمقياس جديد في UsageStatsService.
يتم تحقيق جميع التحسينات والتوفير الفعلي في الحجم عند تحسين الحزمة. يتواصل AppHibernationService مع أجزاء مختلفة من النظام
لإيقاف الحزمة وحذف بيانات ذاكرة التخزين المؤقت وحذف عناصر ART وما إلى ذلك.
يتم بدء إلغاء الإذن مباشرةً من AppHibernationJobService
للحفاظ على وظيفة الإلغاء التلقائي على أجهزة Android 11 والإصدارات الأقدم.
تجربة المستخدم
يتم تزويد المستخدم بكل من المعلومات وعناصر التحكّم في التطبيقات التي يمكن وضعها في وضع الإسبات.
وكما هو الحال مع الإبطال التلقائي، يتلقّى المستخدم إشعارًا بشأن التطبيقات التي تم وضعها في وضع السكون، ويمكنه الانتقال إلى "الإعدادات" مباشرةً من الإشعار لفتح التطبيق وإخراجه من وضع السكون أو حذف التطبيق غير المستخدَم إذا لزم الأمر.
سنواصل دعم هدف المطوّر المتمثل في طلب إعفاء المستخدم من وضع التطبيق في وضع السكون من خلال هدف الإعفاء الحالي من الإبطال التلقائي للأذونات.
التوافق مع الأنظمة القديمة
تتوفّر الميزات الخاصة بوضع الإسبات بدءًا من نظام التشغيل Android 12. لم تكن هذه الميزة متوافقة مع الإصدارات السابقة لأنّ مكوّنات المنصّة (مثل خدمة تابعة لنظام التشغيل الجديدة) لم تكن متوفّرة. سيستمر عمل ميزة الإبطال التلقائي كما تم تنفيذها في إصدارات نظام التشغيل السابقة.
بدءًا من نظام التشغيل Android 12، ولضمان التوافق مع الإصدارات القديمة، تمت إضافة زر إيقاف مؤقت على صفحة التطبيق ضمن التطبيقات والإشعارات في الإعدادات مع الإبقاء على زر الإيقاف التلقائي الأصلي ضمن القائمة الفرعية الأذونات. يتحكّم زر التبديل هذا في الإعفاء العام للتطبيق من نظام إسبات التطبيق.
التخصيص
بعض عمليات التنفيذ هي جزء من مكوّن نظام نموذجي، لذا ننصح الشركاء بعدم تعديل الميزة. يمكن للشركاء بدلاً من ذلك تنفيذ ميزات أو وظائف مشابهة طالما أنّهم يلتزمون بمتطلبات العناية الواجبة بالعملاء.
يجب أن تكون ميزة "وضع التطبيق في السبات" مفعَّلة تلقائيًا لجميع التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث. وهي تشبه ميزة الإلغاء التلقائي للأذونات. على الرغم من أنّ الإعداد نفسه قد يكون مفعَّلاً، قد يختلف تنفيذ ميزة "وضع التطبيقات في السبات" بين التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android وتلك التي تستهدف الإصدار 12. وبشكل أكثر تحديدًا، لا تعمل ميزة "وضع السكون للتطبيقات" إلا مع التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android، بينما تكون في الأساس مجرد إبطال تلقائي للتطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android.
بالإضافة إلى ذلك، قد تنفّذ الشركات المصنّعة للأجهزة الأصلية ميزة مشابهة. ومع ذلك، يتم استهداف هذه الميزات على نطاق زمني أقصر بكثير لتحسين البطارية، ويمكن أن تكون خاصة بمصنّع المعدات الأصلية. يمكن أن تتوافق أي ميزات مشابهة للقيود على التطبيقات طوّرها مصنّعو المعدات الأصلية مع نظام وضع التطبيقات في وضع السكون طالما أنّها تستوفي المعايير الحالية المحدّدة في مستند تعريف التوافق.
الاختبار
يتضمّن إسبات التطبيق اختبارات توافق نظام التشغيل (CTS) واختبارات الوحدات لضمان عمله بشكل صحيح.
AutoRevokeTestAppHibernationIntegrationTest