يُثبِّت مستخدم 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