اكتشاف البيانات غير المحتملة في واجهة المستخدم

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

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

رصد المشاكل غير المحتملة على نظام التشغيل Android 12 والإصدارات الأحدث

بالنسبة إلى الأجهزة التي تستخدم Android 12 (مستوى واجهة برمجة التطبيقات 31) أو الإصدارات الأحدث، يظهر تتبُّع تم التقاطه في مسار الإطارات غير المستقرة ضمن لوحة الشاشة في أداة تحليل وحدة المعالجة المركزية (CPU).

لاكتشاف عدم فقدان البيانات،

  1. في "استوديو Android"، اختَر عرض > أداة Windows > محلّل أو انقر على الملف الشخصي في شريط الأدوات.

    إذا طُلب منك ذلك من خلال مربع الحوار اختيار هدف النشر، اختَر الجهاز الذي تريد نشر تطبيقك عليه لتحديد المواصفات. في حال توصيل جهاز باستخدام USB ولكنه لم يظهر لك ضمن القائمة، تأكّد من أنّك فعّلت ميزة "تصحيح أخطاء الجهاز عبر USB".

  2. انقر في أي مكان في المخطط الزمني لوحدة المعالجة المركزية (CPU) لفتح محلّل وحدة المعالجة المركزية (CPU).

  3. اختَر System Trace (تتبُّع النظام) من قائمة الإعدادات في أداة تحليل وحدة المعالجة المركزية (CPU) وانقر على تسجيل. بعد الانتهاء من التفاعل مع تطبيقك، انقر على إيقاف.

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

  5. عند العثور على إطار غير مستقر، انقر عليه، وبشكل اختياري، يمكنك الضغط على M لضبط التكبير أو التصغير للتركيز على الإطار المحدد. يتم إبراز الأحداث ذات الصلة في سلاسل المحادثات التالية: سلسلة التعليمات الرئيسية وRenderThread وإكمال وحدة معالجة الرسومات. لقطة شاشة لمحلل يعرض إطارات Janky وسلاسل التعليمات الرئيسية

  6. يمكنك اختياريًا عرض جميع الإطارات أو عرض تحليل وقت العرض من خلال التبديل بين مربّعَي الاختيار جميع الإطارات ورحلة المستخدم على التوالي.لقطة شاشة للمحلِّل على النحو الوارد أعلاه ولكن مع وضع علامة في مربّعَي الاختيار "All Frames" (جميع الإطارات) و"Lifecycle" (رحلة المستخدِم)

رصد الأعطال على Android 11

بالنسبة إلى الأجهزة التي تستخدم نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات)، يظهر تتبُّع تم تسجيله في قسم مراحل نشاط الإطار في محلّل وحدة المعالجة المركزية (CPU).

قسم دورة حياة الإطارات مع مسارات مختلفة

يحتوي قسم دورة حياة الإطار على اسم الطبقة وأربعة مسارات. ويمثل كل مسار مرحلة واحدة في مسار عرض الإطار. في ما يلي عناصر رحلة الإطار:

  1. دورة حياة الإطار (اسم الطبقة): يحتوي عنوان القسم على اسم الطبقة بين قوسين. الطبقة هي وحدة تركيب واحدة.
  2. التطبيق: يعرض هذا المسار الوقت المنقضي منذ أن أزال التطبيق المخزن المؤقت من قائمة الانتظار وحتى تمت إضافته مرة أخرى إلى قائمة الانتظار. ويتجاوب هذا عادةً مع أحداث تتبُّع الأحداث في RenderThread.
  3. انتظار وحدة معالجة الرسومات: يعرض هذا المسار مدة امتلاك وحدة معالجة الرسومات للمخزن المؤقت. وهذا هو الوقت منذ إرسال المخزن المؤقت إلى وحدة معالجة الرسومات إلى حين انتهاء وحدة معالجة الرسومات من عملها على المخزن المؤقت. ولا يشير هذا إلى أن وحدة معالجة الرسومات كانت تعمل فقط على هذا المخزن المؤقت خلال هذه الفترة. للحصول على معلومات تفصيلية حول الوحدات التي تعمل عليها وحدة معالجة الرسومات خلال فترة معيّنة، ننصحك باستخدام أداة Android GPU Inspector (أداة فحص وحدة معالجة الرسومات من Android).
  4. المقطوعة الموسيقية: تشير هذه الأغنية إلى الوقت الذي يوضع فيه SurfaceFlinger في مرحلة المخزن المؤقت، ويرسله لتركيبه إلى حين إرسال المخزن المؤقت إلى الشاشة.
  5. الإطارات على الشاشة: يعرض هذا المسار مدة ظهور الإطار على الشاشة.

يوضّح القسم دورة حياة الإطار كيفية تحرك المخزن المؤقت للإطارات بين المراحل المختلفة لمسار العرض. يتم ترميز الإطارات بالألوان حسب رقم الإطار بحيث يسهل تتبع إطار معين.

ويعرض "استوديو Android" أيضًا جميع الإطارات في التتبُّع بتنسيق جدول في علامة التبويب جميع الإطارات.

جدول يضم جميع الإطارات في علامة التبويب "جميع الإطارات"

تمثل أعمدة رقم الإطار والتطبيق وانتظار وحدة معالجة الرسومات والتكوين البيانات نفسها مثل المسارات في قسم دورة حياة الإطار كما هو موضح أعلاه. يمثل العمود Frame Duration الوقت من بداية Application إلى بداية Frames on Display. وهي في الأساس المدة التي يستغرقها عرض الإطار من البداية إلى النهاية.

يمكنك فرز جدول الإطارات حسب أي عمود للعثور بسرعة على الإطار الأقصر أو الأطول. يوفّر الجدول أيضًا عناصر التحكّم في التقسيم على صفحات والتي تساعدك في التنقّل بين مئات الإطارات.

لرصد المشاكل غير المحتملة والتحقيق فيها على نظام التشغيل Android 11، اتَّبِع الخطوات التالية:

  1. رتِّب جدول جميع الإطارات حسب عمود التطبيق بترتيب تنازلي بحيث تظهر الإطارات التي تستغرق أطول مدة أولاً.

    تم ترتيب عمود التطبيق تنازليًا.

  2. ابحث عن أطول الإطارات قيد التشغيل واختَر صف الجدول. يؤدي ذلك إلى تكبير الإطار المحدد في عرض المخطط الزمني إلى اليسار.

    عرض المخطط الزمني بجانب جدول الإطارات

  3. ابحث عن سلاسل المحادثات ذات الصلة في قسمَي مراحل نشاط الإطارات وسلاسل المحادثات.

    قسما "دورة حياة الإطار" و"سلاسل المحادثات"

رصد الأعطال على Android 10 والإصدارات الأقدم

بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 10 (المستوى 29 لواجهة برمجة التطبيقات) والإصدارات الأقدم، يتم عرض معلومات مسار رسومات نظام التشغيل ذات الصلة في قسم واحد ضمن مسار نظام محلّل وحدة المعالجة المركزية (CPU) باسم الشاشة.

نافذة عرض واجهة المستخدم

  • الإطارات: يعرض هذا القسم سلسلة محادثات واجهة المستخدم وRenderThread تتبُّع الأحداث في تطبيقك. ويتم تمييز الأحداث التي تزيد مدتها عن 16 ملي ثانية باللون الأحمر لتسليط الضوء على الإطارات البطيئة المحتملة لأنّها تتجاوز الموعد النهائي للعرض بسرعة 60 لقطة في الثانية.
  • SurfaceFlinger: تعرض هذه الصفحة الحالات التي يعالج فيها جهاز SurfaceFlinger التخزين المؤقت للإطارات. SurfaceFlinger هي عملية نظام مسؤولة عن إرسال المخازن المؤقتة لعرضها.
  • VSYNC: يعرض هذا القسم إشارة VSYNC، وهي إشارة تعمل على مزامنة مسار العرض. ويعرض المسار إشارة تطبيق VSYNC، التي تظهر عندما يبدأ تطبيقك متأخرًا. عادةً ما يحدث هذا لأن مؤشر ترابط واجهة المستخدم مشغول. يتسبب ذلك في ظهور وميض مرئي على شاشتك أثناء إضافة صورة متحركة، ويضيف وقت استجابة إدخالاً إضافيًا إلى أن تكتمل الصورة المتحركة أو التمرير. يُعتبَر ذلك مهمًا على وجه الخصوص إذا تم عرضها على الشاشات ذات معدّل التحديث العالي، إذ إنّها قد تتكرّر أكثر من 60 مرّة في الثانية أو بمعدّل متغير.
  • BufferQueue: يعرض هذا القسم عدد المخازن المؤقتة للإطارات التي تم وضعها في قائمة الانتظار وتنتظر استهلاك SurfaceFlinger. بالنسبة إلى التطبيقات المنشورة على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، يعرض هذا المسار عدد المخزن المؤقت للمساحة الإجمالية للتطبيق قائمة الانتظار المؤقت (0 أو 1 أو 2). ويمكن أن تساعدك قائمة الانتظار المؤقت في فهم حالة مخازن الصور أثناء تنقّلها بين مكوّنات رسومات Android. على سبيل المثال، تعني القيمة 2 أنّ التطبيق مخزَّن مؤقتًا ثلاث مرات حاليًا، ما يؤدي إلى زيادة وقت الاستجابة للإدخال.

يوفّر قسم الشاشة إشارات مفيدة لرصد البيانات غير الدقيقة المحتملة، على سبيل المثال، عندما تستغرق سلسلة تعليمات واجهة المستخدم أو RenderThread مدة أطول من 16 ملي ثانية. وللتحقّق من التفاصيل الدقيقة حول سبب عدم دقّة البيانات، يمكنك فحص قسم السلاسل الذي يعرض سلاسل المحادثات ذات الصلة بعرض واجهة المستخدم.

قسم "سلاسل المحادثات" ضمن "الشبكة الإعلانية"

في الشكل أعلاه، يعرض قسم سلاسل المحادثات سلسلة تعليمات واجهة المستخدم (java.com.google.samples.apps.iosched) وRenderThread وسلسلة سلاسل المحادثات GPU completion. هذه هي سلاسل المحادثات ذات الصلة بعرض واجهة المستخدم وقد تساهم في البيانات غير الواضحة.

لاكتشاف الأجهزة غير المحتملة على Android 10 أو الإصدارات الأقدم، اتَّبِع الخطوات التالية:

  1. انظر إلى مسار الإطارات في الشاشة. الإطارات الحمراء هي المرشحة للتحقيق.

    قسم "الإطارات" ضمن "العرض"

  2. عند العثور على إطار من المحتمل أن يكون بطيئًا، يمكنك تكبيره بالضغط على W أو تمرير عجلة الماوس أثناء الضغط مع الاستمرار على Control (Command على نظام التشغيل macOS). واصِل التكبير حتى تبدأ في رؤية أحداث التتبُّع في سلسلة محادثات واجهة المستخدم وRenderThread.

    تتبُّع الأحداث في سلسلة محادثات واجهة المستخدم وRenderThread

    في الشكل أعلاه، توضّح Choreographer#doFrame الحالات التي تستدعي فيها سلسلة واجهة المستخدم Choreographer لتنسيق الرسوم المتحركة وتنسيق العرض ورسم الصورة والعمليات ذات الصلة. DrawFrames يظهر هذا الرمز عندما يتم إصدار RenderThread في شكل أوامر رسم ويصدرها إلى وحدة معالجة الرسومات.

  3. إذا لاحظت عملية تتبُّع طويلة جدًا، يمكنك تكبيرها ومعرفة السبب المحتمَل وراء بطء العرض. يُظهر الشكل أعلاه inflate في سلسلة واجهة المستخدم، مما يعني أن التطبيق يقضي وقتًا في تضخيم التنسيق. عند تكبير أحد أحداث inflate، يمكنك معرفة المدة التي يستغرقها كل مكوِّن في واجهة المستخدم بالضبط، كما هو موضّح أدناه.

    قائمة تعرض المدة الدقيقة لأحد مكونات واجهة المستخدم

مزيد من المعلومات

لمزيد من المعلومات حول كيفية الحدّ من البيانات غير المرغوب فيها، يُرجى الاطّلاع على المصادر الشائعة للبيانات غير المرغوب فيها.