إسبات التطبيق

يقوم مستخدم Android العادي بتثبيت أكثر من 50 تطبيقًا على أجهزته (يزداد العدد مع زيادة مستوى ذاكرة الوصول العشوائي للأجهزة). ومع ذلك، لا يستخدم المستخدم عددًا كبيرًا من هذه التطبيقات لفترة طويلة من الزمن.

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

قد يتعارض مصنعو المعدات الأصلية الذين يقومون بتعديل النظام الأساسي مع تطبيق إسبات التطبيق. على سبيل المثال

  • قد يؤدي تعديل تعريف استخدام التطبيق أو تقديم طرق لتنبيه تطبيق غير موجود في AOSP إلى مقاطعة دقة إسبات التطبيق
  • قد تؤدي آلية تقييد الملكية الخاصة بشركة OEM المشابهة لإسبات التطبيق غرضًا مشابهًا. في حين يمكن أن يوجد كلاهما، قد يكون هناك بعض التداخل.

تحدد CDD مجموعة جديدة من متطلبات التغييرات التي تعتمد على استخدام التطبيق، على غرار متطلبات 3.5.1 الحالية. يتبع إسبات التطبيق هذه المتطلبات.

رمز الإطار يعيش في:

منطق السياسة يكمن في:

  • الريبو: النظام الأساسي/الحزم/الوحدات/الإذن
  • الدليل: PermissionController/src/com/android/permissioncontroller/hibernation

هندسة معمارية رفيعة المستوى

تعمل خدمة نظام App Hibernation على تحسين تخزين تطبيقات المستخدم غير المستخدمة بشكل متكرر وتمنع تشغيل هذه التطبيقات في الخلفية. لتحقيق هذه النتائج، عندما نقوم بإسبات تطبيق ما، فإننا نقوم على وجه التحديد بما يلي:

  • الإلغاء التلقائي للأذونات
  • فرض إيقاف التطبيق
  • احذف ملفات ODEX وVDEX
  • احذف ذاكرة التخزين المؤقت للتطبيق

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

يتمحور التصميم المخطط حول جزأين رئيسيين:

  • تحديد متى يجب أن تدخل الحزمة في وضع السبات
  • تحسين حزمة السبات

تعد خدمة النظام الجديدة، AppHibernationService ، وخدمة الوظائف، AppHibernationJobService, في PermissionController بمثابة الغراء الذي يتحكم في عملية صنع القرار والمنطق بشكل عام.

تحديد الوقت الذي يجب أن تدخل فيه الحزمة في وضع السبات يتم تشغيله بشكل أساسي بواسطة UsageStatsService ويتم إدارته بواسطة AppHibernationJobService في PermissionController . يوجد منطق السياسة هذا في PermissionController للسماح لنا بالتحديث ديناميكيًا عبر Mainline. بالإضافة إلى ذلك، نخطط لإضافة إشارة جديدة، استخدام المكون، لالتقاط استخدام مكونات الحزمة (على سبيل المثال، الخدمات، موفري المحتوى) كمقياس جديد في UsageStatsService .

تحسين الحزمة هو المكان الذي تحدث فيه جميع المدخرات/التحسينات الفعلية. تتواصل AppHibernationService مع أجزاء مختلفة من النظام لإيقاف الحزمة، وحذف بيانات ذاكرة التخزين المؤقت، وحذف عناصر ART، وما إلى ذلك. يتم بدء إلغاء الإذن مباشرةً من AppHibernationJobService للاحتفاظ بوظيفة الإلغاء التلقائي على الأجهزة التي تعمل بنظام Android 11 والإصدارات الأقدم.

تجربة المستخدم

يتم تزويد المستخدم بالمعلومات وعناصر التحكم في التطبيقات التي يمكن إسباتها.

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

نواصل دعم نية المطور في مطالبة المستخدم بالإعفاء من وضع الإسبات من خلال نية الإعفاء من الإلغاء التلقائي للأذونات الحالية.

التوافق

تتوفر الميزات الخاصة بالإسبات بدءًا من Android 12. ولا يمكن أن تعمل هذه الميزة في الإصدارات السابقة نظرًا لعدم وجود مكونات النظام الأساسي (مثل خدمة النظام الجديدة). يستمر الإبطال التلقائي في العمل كما هو مطبق حاليًا في إصدارات نظام التشغيل السابقة.

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

تخصيص

نظرًا لأن بعض عمليات التنفيذ جزء من مكون النظام المعياري، لا يُنصح الشركاء بتعديل الميزة. يمكن للشركاء بدلاً من ذلك تنفيذ ميزات/وظائف مماثلة طالما أنهم يتبعون متطلبات العناية الواجبة.

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

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

اختبارات

يحتوي إسبات التطبيق على CTS واختبارات الوحدة للتأكد من أنه يعمل بشكل صحيح.