لقطات المهام

لقطات المهام هي بنية أساسية تم تقديمها في Android 8.0 تجمع بين لقطات شاشة للصور المصغّرة الحديثة والمساحات المحفوظة من "مدير النوافذ". تمثل الصور المصغرة الحديثة آخر حالة لأي مهمة في عرض "العناصر الأخيرة".

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

هندسة معمارية

يتم توحيد مفهومي الصور المصغرة الحديثة ومساحات العرض المحفوظة مع مهمة اللقطات. عندما تظهر مهمة في الخلفية، يضع "مدير النوافذ" لقطة شاشة هذه المَهمة إلى GraphicBuffer. طالما أن التطبيق الأعلى يظل نشاط المهمة في الذاكرة، سيتم الاحتفاظ بـ GraphicBuffer هذا في الذاكرة. والآن، عندما يظهر النشاط نفسه في المقدمة مرة أخرى، نجد أن Windows سينشئ المدير نافذة بداية (TaskSnapshotSurface)، ويرفق GraphicBuffer بدون نسخ أي ذاكرة إلى قائمة انتظار المخزن المؤقت في البداية نافذة. وبمجرد أن يُرسم النشاط أول إطار له، تظهر لقطة المهمة ستتلاشى نافذة البدء بسلاسة مثل شاشات البداية العادية.

يتم أيضًا إرسال نفس GraphicBuffer عبر Binder إلى SystemUI لاستخدامه في رسم حالة معاينة مهمة في عرض "العناصر الأخيرة". بما أنّ هذا مجرد مرجع إلى مخزن احتياطي، يؤدي إرساله عبر البيندر إلى استهلاك موارد قليلة. عندما يصل GraphicBuffer إلى SystemUI، وهو ملفوف في صورة نقطية للجهاز ثم رسمها على الشاشة دون تحميل أي ذاكرة إلى ذاكرة الرسومات.

المزايا

هناك ثلاث فوائد رئيسية لهذه البنية الجديدة:

  • إذا تم استخدام لقطة المهمة كنافذة بداية، فهناك تلاشي متقاطع رائع بين اللقطة والمحتوى الحقيقي.
  • عند رسم لقطة مهمة في SystemUI، يمكن القيام بذلك بدون والنسخ. في السابق، كان يجب نسخ الصورة النقطية إلى Ashmem، ثم إلى رسومات الذاكرة. ونظرًا لأن هذه الطريقة تخزّن اللقطة مباشرةً في ذاكرة الرسومات، فلا والنسخ والنسخ.
  • الحالة التي تراها في "أحدث الأماكن" تتطابق دائمًا مع الحالة التي ستراها أولاً عندما إعادة فتح التطبيق. كما أن وجود نفس المخزن المؤقت هنا يوفر الكثير من الذاكرة. وهذا هو السبب في أن ميزة "الملفات الحديثة" يمكنها الآن عرض هذه الصور بدرجة الدقة الكاملة. وفي السابق، تم خفض نسبة العيّنات بنسبة% 64 لتوفير مساحة الذاكرة.

التنفيذ

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

لإيقاف هذه الميزة، عدِّل هذه الدالة:

frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java#215

لاحظ أنه إذا تم تعطيل الميزة، فلن تُظهر طريقة عرض "الأماكن الأخيرة" أي الصور المصغّرة من أي نوع.

لقطات عالية الدقة ومنخفضة الدقة

حيث تتم كتابة لقطات المهام على القرص على مقياسين. عند استعادة مهمة من القرص، تتم قراءة اللقطات منخفضة الدقة أولاً، ثم يتم استبدالها لنظيرتهما عالية الدقة. يساعد هذا التحسين على زيادة أوقات تحميل الصور. وإلا، فقد يكون هناك تأخير بسيط عند قراءة ملف اللقطة من قرص، وسيرى المستخدم بطاقة مهام فارغة إلى أن تتوفر الصورة. يمكنك ضبط المقاييس في ملف إعدادات تراكب الأجهزة. overlay/frameworks/base/core/res/res/values/config.xml حسب الإعداد config_highResTaskSnapshotScale و config_lowResTaskSnapshotScale بشكل تلقائي، يتم ضبطها على 1.0. و0.5 على التوالي. إيقاف اللقطات المنخفضة الدقة من خلال ضبط إعداداتها config_lowResTaskSnapshotScale إلى 0.0.

الأمثلة والمصدر

ابحث عن باقي الرمز البرمجي لهذه الميزة في ملفات TaskSnapshot* في:

frameworks/base/+/main/services/core/java/com/android/server/wm/