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

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

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

إذا كنت تستخدم Jetpack Compose، فإنّ أفضل طريقة للتحقيق في أداء العرض في عملية التتبُّع هي تفعيل تتبُّع التركيب. للاطّلاع على المشاكل الشائعة في أداء Compose، راجِع أداء Jetpack Compose.

بالنسبة إلى تطبيقات Compose، استخدِم الخطوات الواردة في هذا الدليل عندما تحتاج إلى عرض على مستوى عالٍ لتطبيقك. تساعدك عمليات تتبُّع النظام التي تم تقديمها هنا في تحديد إيقاف مؤقت لعرض واجهة المستخدم الناتج عن المشاكل على مستوى النظام التي تحظر سلسلة التعليمات الرئيسية، مثل عمليات الإدخال والإخراج الكثيفة على القرص، أو جمع البيانات المهملة بشكلٍ مفرط، أو المؤثِّرات السلبية في عرض وحدة معالجة الرسومات. استخدِم دليل أداء Jetpack Compose إذا كنت قد عزلت إيقاف مؤقت لعرض واجهة المستخدم في طبقة واجهة المستخدم. يساعدك هذا الدليل في إصلاح أوجه عدم الكفاءة الخاصة بـ Compose، مثل عمليات إعادة التركيب المفرطة أو قراءة الحالة في المرحلة الخطأ أو استخدام مَعلمات غير مستقرة.

رصد تأخّر الاستجابة على Android 12 والإصدارات الأحدث

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

لرصد إيقاف مؤقت لعرض واجهة المستخدم،

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

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

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

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

  4. يجب أن يظهر لك مسار اللقطات التي تعاني من تأخّر الاستجابة ضِمن العرض. لا يعرض Profiler تلقائيًا سوى اللقطات التي تعاني من تأخّر الاستجابة كمرشّحة للتحقيق. ضِمن كل لقطة تعاني من تأخّر الاستجابة، يميّز الجزء الأحمر المدة التي تستغرقها اللقطة بعد الموعد النهائي للعرض. لقطة شاشة لمسار "اللقطات غير السلسة"

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

  6. يمكنك اختياريًا الاطّلاع على جميع اللقطات أو عرض تفاصيل وقت العرض من خلال تفعيل مربّعَي الاختيار جميع اللقطات ودورة الحياة على التوالي. لقطة شاشة لأداة Profiler كما هو موضّح أعلاه ولكن مع وضع علامة في مربّعَي الاختيار "جميع اللقطات" و"رحلة المستخدم"

رصد إيقاف مؤقت لعرض واجهة المستخدم على Android 11

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

قسم "مراحل النشاط في الإطار" مع مسارات مختلفة

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

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

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

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

جدول يتضمّن جميع اللقطات في التتبُّع ضمن علامة التبويب "جميع اللقطات"

تمثّل أعمدة رقم اللقطة والتطبيق والانتظار حتى انتهاء عمل وحدة معالجة الرسومات و التركيب البيانات نفسها التي تمثّلها المسارات في قسم دورة حياة اللقطة أعلاه. يمثّل العمود مدة اللقطة الوقت منذ بداية التطبيق إلى بداية اللقطات المعروضة. هذا هو الوقت الذي يستغرقه عرض لقطة من البداية إلى النهاية.

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

لرصد إيقاف مؤقت لعرض واجهة المستخدم والتحقيق فيه على Android 11، اتّبِع الخطوات التالية:

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

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

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

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

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

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

رصد تأخّر الاستجابة على Android 10 والإصدارات الأقدم

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

نافذة واجهة المستخدم على الشاشة

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

التحقيق المتقدّم باستخدام Perfetto

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

يمكنك تصدير عملية تتبُّع النظام من "استوديو Android" من خلال النقر على رمز "تصدير عملية التتبُّع" في لوحة Profiler، ثم سحب الملف الناتج إلى واجهة مستخدم Perfetto المستندة إلى الويب . يوفّر ذلك بيئة مخصّصة لتحليل الأداء على مستوى النظام. للحصول على معلومات حول كيفية تفسير تفاصيل مسار رسومات نظام التشغيل، مثل VSYNC وSurfaceFlinger ومسارات المخطط الزمني للقطات، راجِع مستندات Perfetto الرسمية.

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

لمزيد من المعلومات حول كيفية تقليل إيقاف مؤقت لعرض واجهة المستخدم، راجِع المصادر الشائعة لإيقاف مؤقت لعرض واجهة المستخدم.