يُثبِّت مستخدم Android العادي أكثر من 50 تطبيقًا على أجهزته (يزداد العدد مع زيادة فئة ذاكرة الوصول العشوائي للأجهزة). ومع ذلك، هناك عدد كبير من هذه التطبيقات لا يستخدمها المستخدم لفترة طويلة.
يؤدي وضع "الإسبات" للتطبيقات إلى إيقاف التطبيقات التي لا يستخدمها المستخدم لبضعة أشهر، على غرار الإلغاء التلقائي للأذونات. يؤدي ذلك إلى فرض إيقاف التطبيق ووضعه في حالة نُحسِّن فيها مساحة التخزين بدلاً من الأداء. يتم أيضًا تجميع ميزة إلغاء الإذن تلقائيًا مع هذه الحالة، وتشتركان في إعداد الاستثناء نفسه في الإعدادات. لا يُشغِّل التطبيق الذي تم فرض إيقافه مهام أو تنبيهات في الخلفية ولا يمكنه إرسال إشعارات فورية. وعندما يستخدِم المستخدم التطبيق مرة أخرى، يخرج التطبيق من وضع السكون ويتم تنفيذ المهام/التنبيهات/الإشعارات مرة أخرى كالمعتاد. يجب إعادة جدولة أي مهام/تنبيهات/إشعارات تم تحديد موعدها قبل دخول التطبيق إلى وضع السكون.
قد يؤدي تعديل المصنّعين الأصليّين للأجهزة للمنصة إلى تعارض مع تنفيذ وضع "الاستراحة" في التطبيقات. على سبيل المثال
- قد يؤدي تعديل تعريف استخدام التطبيق أو تقديم طرق لتنشيط تطبيق غير مضمّنة في AOSP إلى إيقاف دقة وضع السكون في التطبيق.
- قد يؤدي وضع الاستعداد المُنشأ من المصنّع الأصلي للجهاز إلى تحقيق غرض مماثل، وذلك من خلال آلية قيود خاصة به تشبه وضع السكون في التطبيقات. على الرغم من أنّ كلا النوعَين يمكن أن يتوفّرَا، قد يكون هناك بعض التداخل بينهما.
يوضّح إطار عمل CDD مجموعة جديدة من المتطلبات للتغييرات التي تستند إلى استخدام التطبيق، على غرار المتطلّب الحالي 3.5.1. يتبع وضع "الاستراحة" للتطبيقات هذه المتطلبات.
يتوفّر رمز الإطار في:
- repo: platform/frameworks/base
- الدليل: services/core/java/com/android/server/apphibernation
يتوفّر منطق السياسة في:
- repo: platform/packages/modules/Permission
- الدليل: 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، لضمان التوافق مع الإصدارات القديمة، تتم إضافة زر للتبديل إلى وضع السكون في صفحة التطبيق ضمن التطبيقات والإشعارات في الإعدادات، مع إبقاء زر التبديل الأصلي لإلغاء الأذونات تلقائيًا ضمن القائمة الفرعية الأذونات. تتيح هذه الإعدادات التماثلية التحكّم في الاستثناء العام لنظام السكون في التطبيقات.
التخصيص
يشكّل جزء من التنفيذ جزءًا من مكوّن النظام المكوّن من وحدات، لذا لا يُنصح الشركاء بتعديل الميزة. ويمكن للشركاء بدلاً من ذلك تنفيذ ميزات أو وظائف مشابهة طالما أنهم يمتثلون لمتطلبات CDD.
يجب أن تكون ميزة "الوضع المنخفض الطاقة" مفعَّلة تلقائيًا لجميع التطبيقات التي تستهدف الإصدار 11 من Android أو الإصدارات الأحدث. وهذا الإجراء مماثل للإلغاء التلقائي للأذونات. على الرغم من أنّ الإعداد نفسه قد يكون مفعّلاً، إلا أنّ تنفيذ وضع السكون للتطبيقات قد يختلف بين التطبيقات التي تستهدف Android 11 مقارنةً بـ Android 12. وعلى وجه التحديد، لا تعمل ميزة التجميد المؤقت للتطبيقات إلا مع التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android ، في حين أنّها تعمل بشكل أساسي على إبطال الترخيص تلقائيًا للتطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android.
بالإضافة إلى ذلك، قد تُطبّق المصنّعون الأصليون للأجهزة ميزة مشابهة. ومع ذلك، يتمّ استخدام هذه الميزات على مقياس زمني أقصر بكثير لتحسين استهلاك البطارية، وقد يكون ذلك خاصًا بالمصنّع الأصلي للجهاز. يمكن أن تتعايش أي ميزات مماثلة لتقييد التطبيقات التي يطوّرها المصنّعون الأصليون للأجهزة مع نظام وضع السكون للتطبيقات ما دامت تستوفي المعايير الحالية المحدّدة في CDD.
الاختبار
يتضمّن وضع "الاستراحة" في التطبيقات اختبارات CTS واختبارات الوحدة لضمان عمله بشكل صحيح.
AutoRevokeTest
AppHibernationIntegrationTest