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

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

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

قد تتعارض الشركات المصنعة للمعدات الأصلية التي تعدل النظام الأساسي مع تطبيق إسبات التطبيق. فمثلا

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

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

يعمل كود الإطار العام في:

منطق السياسة موجود في:

  • الريبو: النظام الأساسي / الحزم / الوحدات / الإذن
  • الدليل: PermissionController / src / com / android / allowcontroller / 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 11 (أي أن إسبات التطبيق يعمل فقط للتطبيقات التي تستهدف Android 11 ، في حين أنه يتم بشكل أساسي الإلغاء التلقائي للتطبيقات التي تستهدف Android 11.

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

اختبارات

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