يُثبّت مستخدم Android العادي أكثر من 50 تطبيقًا على أجهزته (يزداد العدد مع زيادة مستوى ذاكرة الوصول العشوائي في الأجهزة). ومع ذلك، لا يستخدم عدد كبير من المستخدمين هذه التطبيقات لفترة طويلة.
تؤدي ميزة "إسبات التطبيقات" إلى إسبات التطبيقات التي لا يستخدمها المستخدم لبضعة أشهر، وهي تشبه ميزة "الإلغاء التلقائي للأذونات". يؤدي ذلك إلى فرض إيقاف التطبيق ووضعه في حالة يتم فيها تحسين مساحة التخزين بدلاً من الأداء. يتم أيضًا تجميع ميزة الإبطال التلقائي للأذونات مع هذه الحالة، ويشتركان في إعداد الإعفاء نفسه في الإعدادات. لا يشغّل التطبيق الذي تم إيقافه بالقوة أي مهام أو تنبيهات في الخلفية، ولا يمكنه إرسال إشعارات فورية. وعندما يعاود المستخدم استخدام التطبيق، يخرج التطبيق من وضع الإسبات ويتم تشغيل المهام/التنبيهات/الإشعارات مرة أخرى كالمعتاد. يجب إعادة جدولة أي مهام أو تنبيهات أو إشعارات تمت جدولتها قبل أن يدخل التطبيق في وضع السكون.
قد يتعارض تعديل المصنّعين الأصليين للجهاز على النظام الأساسي مع عملية تنفيذ ميزة "وضع التطبيقات في السبات". على سبيل المثال
- قد يؤدي تعديل تعريف استخدام التطبيق أو تقديم طرق لتنشيط تطبيق غير متوفّرة في مشروع 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 والإصدارات الأقدم.
تجربة المستخدم
يتم تزويد المستخدم بالمعلومات وعناصر التحكّم في التطبيقات التي يمكن وضعها في وضع الإسبات.
وكما هو الحال مع الإبطال التلقائي، يتلقّى المستخدم إشعارًا بشأن التطبيقات التي تم وضعها في وضع الإسبات، ويمكنه الانتقال إلى "الإعدادات" مباشرةً من الإشعار لفتح التطبيق وإخراجه من وضع الإسبات أو حذف التطبيق غير المستخدَم إذا لزم الأمر.
سنواصل دعم نية المطوّر في طلب إعفاء المستخدم من وضع التطبيق في وضع السكون من خلال نية الإعفاء الحالية من الإبطال التلقائي للأذونات.
التوافق مع الإصدارات السابقة
تتوفّر الميزات الخاصة بوضع الإسبات بدءًا من الإصدار 12 من نظام التشغيل Android. لم تكن هذه الميزة متوافقة مع الإصدارات السابقة لأنّ مكوّنات المنصّة (مثل خدمة النظام الجديدة) لم تكن متوفّرة. سيستمر عمل ميزة الإبطال التلقائي كما تم تنفيذها في إصدارات نظام التشغيل السابقة.
بدءًا من نظام التشغيل Android 12، ولضمان التوافق مع الإصدارات القديمة، تمت إضافة زر إيقاف مؤقت في صفحة التطبيق ضمن التطبيقات والإشعارات في الإعدادات مع الإبقاء على زر الإيقاف التلقائي الأصلي ضمن القائمة الفرعية الأذونات. يتحكّم زر التبديل هذا في الإعفاء العام للتطبيق من نظام وضع التطبيقات في وضع السكون.
التخصيص
بعض عمليات التنفيذ هي جزء من مكوّن نظام نموذجي، لذا ننصح الشركاء بعدم تعديل الميزة. يمكن للشركاء بدلاً من ذلك تنفيذ ميزات أو وظائف مشابهة طالما أنّهم يلتزمون بمتطلبات العناية الواجبة بالعملاء.
يجب أن تكون ميزة "وضع التطبيق في وضع السكون" مفعَّلة تلقائيًا لجميع التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث. وهي تشبه ميزة الإلغاء التلقائي للأذونات. على الرغم من أنّ الإعداد نفسه قد يكون مفعَّلاً، قد يختلف تنفيذ وضع التطبيقات في وضع السكون بين التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android وتلك التي تستهدف الإصدار 12. وبشكل أكثر تحديدًا، لا تعمل ميزة "وضع السكون للتطبيقات" إلا مع التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android، بينما تكون في الأساس مجرد إبطال تلقائي للتطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android.
بالإضافة إلى ذلك، قد تنفّذ الشركات المصنّعة للأجهزة الأصلية ميزة مشابهة. ومع ذلك، يتم استهداف هذه الميزات على نطاق زمني أقصر بكثير لتحسين البطارية، ويمكن أن تكون خاصة بمصنّع المعدات الأصلية. يمكن أن تتوافق أي ميزات مشابهة لتقييد التطبيقات طوّرها المصنّعون الأصليون للأجهزة مع نظام "وضع التطبيقات في وضع السكون" طالما أنّها تستوفي المعايير الحالية المحدّدة في مستند تعريف التوافق.
الاختبار
تتضمّن ميزة "وضع التطبيق في السبات" اختبارات توافق نظام التشغيل (CTS) واختبارات الوحدات لضمان عملها بشكل صحيح.
AutoRevokeTest
AppHibernationIntegrationTest