Traceview: ما هو، أداة تتبع وتنميط Android

المؤلف: IT Sectr نُشر: 2026-03-30 وقت القراءة: 9 دق

Traceview هي أداة تتبع رسومية مدمجة في Android Studio تسجل وتصور تنفيذ أساليب التطبيق من حيث الوقت وموارد وحدة المعالجة المركزية. على عكس Systrace الذي يعرض عمليات النظام على مستوى النواة، يركز Traceview على أساليب Java و Kotlin داخل التطبيق، والتي يتم استدعاؤها في سلسلة من إدخال المستخدم إلى عرض واجهة المستخدم. وفقًا لـ Google, 2024، تتيح الأداة العثور على اختناقات الأداء على مستوى الاستدعاءات الفردية وتحسين الكود قبل الإصدار.

الخلاصة

  • Traceview هو أداة تنميط رسومية لأساليب Android في Android Studio تعتمد على System Tracing
  • التتبع يسجل مدة كل أسلوب وعدد الاستدعاءات ووقت وحدة المعالجة المركزية
  • الجدول الزمني لـ Traceview يعرض الاستدعاءات بترتيب زمني مع تداخل السلاسل
  • التنميط يساعد في العثور على الأساليب البطيئة والتخصيصات الزائدة والانسدادات
  • التكامل مع Android Profiler وواجهة برمجة التطبيقات Debug.startMethodTracing للالتقاط المرن

ما هو Traceview في Android

Traceview هو أداة تنميط رسومية مدمجة في Android Studio تعرض تتبعات تنفيذ أساليب تطبيقات Android كجدول زمني وجدول استدعاءات. إنه جزء من Android SDK ومتوفر عبر Android Profiler بدءًا من Android Studio 3.0، وكذلك عبر أداة سطر الأوامر dmtracedump.

الغرض من الأداة

المهمة الرئيسية لـ Traceview هي مساعدة المطورين في العثور على الأساليب التي تستهلك معظم وقت وحدة المعالجة المركزية. على عكس التسجيل البسيط، Traceview يسجل الوقت الدقيق لدخول وخروج كل أسلوب، وينشئ Call Chart وشجرة Top-Down، مما يسمح باكتشاف الحالات الشاذة في الأداء بصريًا. الأداة مفيدة بشكل خاص عند تنميط سلسلة واجهة المستخدم، حيث يؤدي تأخير 16 مللي ثانية إلى فقدان الإطار.

التاريخ والتطور

Traceview ظهر لأول مرة في الإصدارات المبكرة من Android SDK كأداة مستقلة لعرض ملفات .trace. مع إصدار Android Studio 3.0 (2017)، أصبح جزءًا من Android Profiler، وحصل على تكامل مع الجداول الزمنية الحية لوحدة المعالجة المركزية والذاكرة والشبكة. وفقًا لـ Google I/O 2018، يواصل فريق Android Studio تطوير أداة التنميط، مضيفًا دعمًا للكود الأصلي عبر systrace و perfetto. في الإصدارات الحالية من Android Studio، يعمل Traceview فوق تنسيق Perfetto ولكنه يحتفظ بالتوافق مع الإصدارات السابقة مع تنسيق .trace الكلاسيكي.

كيف يعمل Traceview

Traceview يتلقى البيانات من آلية System Tracing في Android Runtime (ART). عند تشغيل التطبيق مع تمكين التتبع، يسجل ART الطوابع الزمنية لبداية ونهاية كل أسلوب يتم تنفيذه، بما في ذلك اسم الفئة واسم الأسلوب ومعرف السلسلة.

kotlin
// بدء تتبع في كود التطبيق
Debug.startMethodTracing("app_trace")

// مقطع كود حرج للتحليل
loadHeavyData()

// إيقاف التتبع — تم حفظ الملف على الجهاز
Debug.stopMethodTracing()

System Tracing يعمل على مستوى الآلة الافتراضية ART ويسجل كل استدعاء أسلوب بدقة ميكروثانية. تتم كتابة البيانات في مخزن مؤقت دائري لتقليل التأثير على أداء التطبيق. بعد إيقاف التتبع، يتم تفريغ المخزن المؤقت إلى ملف .trace على وحدة التخزين الداخلية للجهاز.

تنسيق ملف .trace

يحتوي ملف .trace على رأس بإصدار التنسيق ووقت البدء، متبوعًا بسجلات لكل استدعاء: معرف السلسلة و معرف الأسلوب و الطابع الزمني للدخول و الطابع الزمني للخروج. يقوم Android Studio تلقائيًا بتحميل ملف .trace ويبني عرضين رئيسيين: لوحة الجدول الزمني للتسلسل الزمني ولوحة الملف الشخصي للتسلسل الهرمي للاستدعاءات. افتراضيًا، الحد الأقصى لحجم المخزن المؤقت هو 8 ميجابايت، ولكن يمكن زيادته عبر Debug.startMethodTracing(filename, maxSize).

الميزات الرئيسية لـ Traceview

Traceview يوفر عدة طرق عرض بيانات متكاملة، كل منها يعالج مهمة محددة في تحليل الأداء.

Call Chart (مخطط الاستدعاءات)

Call Chart هو جدول زمني أفقي حيث يتم عرض كل سلسلة كمسار منفصل. يتم عرض الأساليب كمستطيلات ملونة: عرض المستطيل يتناسب مع وقت التنفيذ، والتداخل يعكس التسلسل الهرمي للاستدعاءات. إذا استدعى أسلوب أسلوبًا آخر، يتم رسم المستطيل الفرعي داخل المستطيل الأصلي. يسمح هذا التصور بالتحديد الفوري للعمليات التي حظرت السلسلة.

أشجار Top-Down و Bottom-Up

شجرة Top-Down تُظهر وقت تنفيذ الأسلوب بما في ذلك جميع استدعاءاته المتداخلة — Inclusive Time. شجرة Bottom-Up، على العكس، تُظهر أي الأساليب الأم استدعت أسلوبًا معينًا — مفيد للعثور على مصدر عملية ثقيلة. الفرق بين Inclusive و Exclusive Time مهم: قد ينفذ الأسلوب بسرعة ولكنه يستدعي أسلوبًا فرعيًا بطيئًا، وهذا يظهر فقط في Inclusive Time.

البحث والتصفية

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

المقياسالوصفالوحدة
Inclusive Timeالوقت الإجمالي للأسلوب + جميع استدعاءاته الفرعيةμs / مللي ثانية
Exclusive Timeوقت الأسلوب فقط بدون الاستدعاءات الفرعيةμs / مللي ثانية
Calls + Recurعدد الاستدعاءات بما في ذلك التكرارعدد
CPU Timeالوقت الفعلي المنفق على وحدة المعالجة المركزية (بدون انتظار)μs / مللي ثانية
Real Timeوقت الساعة من دخول الأسلوب إلى خروجهμs / مللي ثانية

تصدير البيانات

Traceview يسمح بتصدير التتبعات بتنسيق CSV لتحليلها في جداول البيانات أو الرسوم البيانية. في Android Studio، يمكن أيضًا نسخ جزء محدد من الجدول الزمني كصورة — لإدراجها في تقارير الأخطاء أو التوثيق. لـ CI/CD، يتوفر التصدير بتنسيق Perfetto عبر أداة cmdline-tools.

كيفية استخدام Traceview في Android Studio

التنميط عبر Traceview متاح بطريقتين: عبر Android Profiler مع الالتقاط المباشر وعبر استدعاءات برمجية لواجهة برمجة التطبيقات Debug. الطريقة الأولى مناسبة للتحليل المخصص، والثانية لاختبارات الأداء القابلة لإعادة الإنتاج.

الالتقاط عبر Android Profiler

في Android Studio، افتح علامة التبويب Profiler (View → Tool Windows → Profiler)، وحدد جهازك وعملية تطبيقك. انقر على مقطع CPU، ثم حدد وضع “Trace Java Methods” وانقر على Record. بعد التفاعل مع التطبيق، انقر على Stop — Traceview سيفتح التتبع المسجل تلقائيًا. مدة التسجيل الافتراضية محدودة بـ 30 ثانية، ولكن يمكن تغيير الحد في إعدادات أداة التنميط.

بدء التتبع برمجيًا

للتنميط الدقيق لقسم معين من الكود، استخدم Debug.startMethodTracing و Debug.stopMethodTracing. يتم حفظ الملف في وحدة التخزين الخارجية للتطبيق في المسار الذي يعيده context.getExternalFilesDir(null). بعد الانتهاء، انقل ملف .trace إلى جهاز الكمبيوتر الخاص بك عبر Android Studio Device Explorer، ثم افتحه من خلال File → Open في Android Studio.

kotlin
Debug.startMethodTracing(
    "heavy_computation",
    Debug.TRACE_COUNT_ALLOCS
)

processLargeDataset()

Debug.stopMethodTracing()

تكوين معلمات التتبع

Debug.startMethodTracing يأخذ ثلاث معلمات: اسم الملف (بدون امتداد)، والحد الأقصى لحجم المخزن المؤقت (افتراضيًا 8 ميجابايت)، والأعلام. العلم TRACE_COUNT_ALLOCS يضيف حساب تخصيص الكائنات — مفيد للعثور على تسريبات الذاكرة. Traceview غير مناسب لتنميط الكود الأصلي — استخدم SimplePerf أو Perfetto. للاختبارات الطويلة (أكثر من 30 ثانية)، يُنصح بزيادة المخزن المؤقت إلى 64–128 ميجابايت عبر معلمة maxSize.

قراءة الجدول الزمني لـ Traceview

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

كيفية قراءة لوحة الملف الشخصي

في لوحة الملف الشخصي، كل صف هو أسلوب مع أعمدة لـ Inclusive Time و Exclusive Time و Calls + Recur و CPU Time. رتب الجدول حسب Inclusive Time (تنازليًا) لرؤية الأساليب التي استغرقت أكبر وقت إجمالي أولاً. إذا كان للأسلوب Inclusive Time مرتفع و Exclusive Time منخفض — المشكلة في استدعاءاته الفرعية، وتحتاج إلى توسيع الشجرة. على سبيل المثال، ListView.getView قد يكون له Inclusive Time مرتفع بسبب استدعاءات تحميل الصور.

تحديد الاختناقات

ابحث عن الأساليب ذات Real Time المرتفع بشكل غير طبيعي ولكن CPU Time منخفض — هذا يشير إلى حظر (انتظار إدخال/إخراج، عملية شبكة، تنازع القفل). الأساليب ذات CPU Time المرتفع تتطلب تحسين الخوارزمية. بالنسبة لسلسلة واجهة المستخدم، يجب أن يكتمل كل أسلوب خلال 16 مللي ثانية — إذا تجاوز أي استدعاء هذا الحد، يفقد التطبيق إطارًا ويرى المستخدم اهتزازًا. وفقًا لتوصيات Google، يجب ألا يتجاوز الوقت الإجمالي لجميع الاستدعاءات في سلسلة واجهة المستخدم لكل إطار 8–10 مللي ثانية، تاركًا هامشًا لعمليات النظام.

مقارنة Traceview و Systrace: الأدوات

على الرغم من أن Traceview و Systrace كلاهما من أدوات تتبع Android، إلا أنهما يحلان مهام مختلفة ويستخدمان في مراحل تنميط مختلفة. الفرق الرئيسي هو مستوى التفاصيل: Traceview يعمل على مستوى أساليب Java/Kotlin، بينما Systrace يعمل على مستوى عمليات النظام (CPU و GPU و Binder و SurfaceFlinger).

المعيارTraceviewSystrace
المستوىالأساليب (Java/Kotlin)عمليات النظام (CPU/GPU/IO)
الواجهةAndroid Studio Profilerسطر الأوامر + تقرير HTML
البياناتInclusive/Exclusive Timeتحميل CPU، معدل الإطارات
المدةحتى 30 ثانية (Profiler)، غير محدود (API)حتى 60 ثانية
الكود الأصليغير مدعوممدعوم عبر علامات atrace

في الممارسة العملية، تكمل كلتا الأداتين بعضهما البعض: أولاً Systrace يساعد في تحديد مكون النظام الذي يسبب المشكلة (مثل GC المتكرر أو أقفال Binder)، ثم Traceview يسمح بالتعمق في أسلوب معين داخل التطبيق. في Android Studio، تم دمج كلتا الأداتين في Android Profiler — CPU Profiler يختار تلقائيًا وضع التسجيل الأمثل. على الأجهزة التي تعمل بنظام Android 12+، يعمل Systrace و Traceview فوق Perfetto، مما يوفر تنسيق بيانات موحدًا لجميع أنواع التنميط.

أمثلة كود مع Traceview

التنميط الفعال يتطلب أكثر من مجرد بدء التتبع — تحتاج إلى وضع نقاط الالتقاط بشكل صحيح وتفسير النتائج. فيما يلي مثالان عمليان: تنميط تحميل RecyclerView ومقارنة خوارزميتين في اختبار أداء.

تنميط تحميل RecyclerView

المثال الأول هو تتبع المسار الحرج أثناء تمرير القائمة. RecyclerView يستدعي onBindViewHolder لكل عنصر مرئي، وإذا استغرق هذا الأسلوب أكثر من 16 مللي ثانية، يصبح التمرير متقطعًا. التتبع حول onBindViewHolder سيظهر أي العمليات المحددة داخله تستغرق وقتًا.

kotlin
class MyAdapter : RecyclerView.Adapter<ViewHolder>() {
    override fun onBindViewHolder(
        holder: ViewHolder,
        position: Int
    ) {
        Debug.startMethodTracing("bind_card_$position")

        holder.bind(items[position])

        Debug.stopMethodTracing()
    }
}

مقارنة خوارزميتين

المثال الثاني هو اختبار سرعة A/B لتنفيذين: تحميل الصور عبر Glide مقابل BitmapFactory اليدوي. هذا التتبع يسمح بالمقارنة الموضوعية لـ Inclusive Time لكلتا الاستراتيجيتين واختيار الأمثل. من المهم تشغيل كل اختبار على جهاز دافئ (بعد 3–5 دورات) تحت ظروف متطابقة (حمل الخلفية، درجة الحرارة).

kotlin
fun compareImageLoadingStrategies() {
    // اختبار A: Glide
    Debug.startMethodTracing("glide_test")
    loadWithGlide()
    Debug.stopMethodTracing()

    // اختبار B: BitmapFactory
    Debug.startMethodTracing("bitmap_test")
    loadWithBitmapFactory()
    Debug.stopMethodTracing()
}

بعد التشغيل، افتح كلا ملفي .trace في Android Studio وقارن Inclusive Time في لوحة الملف الشخصي. إذا أظهر Glide 3x أقل Inclusive Time لنفس المهمة — فهذا أساس موضوعي لاختيار المكتبة. وفقًا لـ Tony John (مطور Glide، 2023)، تستخدم المكتبة التخزين المؤقت ومجموعة سلاسل، مما يوفر ربحًا يصل إلى 40% في التحميلات المتكررة.

الأسئلة الشائعة

كيف يختلف Traceview عن Android Profiler؟

Traceview هو نواة عرض التتبعات داخل Android Profiler. يوفر Profiler واجهة مستخدم إضافية لبدء وإيقاف التسجيل، بينما يتولى Traceview عرض الجدول الزمني وإحصائيات الأساليب. كلاهما يستخدم نفس تنسيق بيانات .trace.

هل يمكن استخدام Traceview على جهاز فعلي؟

نعم، Traceview يعمل على كل من المحاكي والأجهزة الفعلية Android. يجب تمكين تصحيح أخطاء USB، ويجب بناء التطبيق في وضع debuggable. البيانات على الأجهزة الفعلية أكثر دقة، حيث قد يشوه المحاكي التوقيتات بسبب المحاكاة الافتراضية.

ما هو الحجم الأقصى لملف .trace؟

الحجم الأقصى الافتراضي هو 8 ميجابايت، ولكن يمكن زيادته إلى 256 ميجابايت عبر معلمة maxSize في Debug.startMethodTracing. لجلسات التنميط الطويلة، استخدم Perfetto، الذي ليس له حد صارم على حجم التتبع.

لماذا لا يعرض Traceview الأساليب الأصلية؟

يعمل Traceview على مستوى Android Runtime (ART) ويرى فقط أساليب Java و Kotlin المُدارة. لتنميط الكود الأصلي (C/C++ عبر JNI)، استخدم SimplePerf أو Perfetto مع FTrace، اللذان يلتقطان استدعاءات النظام على مستوى النواة.

كيفية فتح ملف .trace بدون Android Studio؟

استخدم أداة dmtracedump من Android SDK (مجلد platform-tools). تنشئ تقرير HTML مع جدول زمني وجدول إحصائيات. على Windows: dmtracedump -h trace.trace > report.html. بديل هو واجهة Perfetto (ui.perfetto.dev)، التي تدعم استيراد تنسيق .trace.

الملخص

  • Traceview هو أداة تنميط رسومية لأساليب Android لتحليل الأداء في Android Studio
  • الأداة تعمل على مستوى ART وتسجل Inclusive و Exclusive Time لكل أسلوب Java/Kotlin
  • عرضان رئيسيان: Call Chart للجدول الزمني و لوحة الملف الشخصي للإحصائيات الهرمية
  • الالتقاط متاح عبر Android Profiler (UI) أو برمجيًا عبر Debug.startMethodTracing
  • لسلسلة واجهة المستخدم، يجب أن يكتمل كل أسلوب في 16 مللي ثانية، وإلا يفقد التطبيق الإطارات
  • Traceview غير مناسب للكود الأصلي — استخدم SimplePerf أو Perfetto
  • يوصى بدمج Traceview و Systrace للحصول على صورة أداء كاملة

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا