إنشاء سجلات التتبع من خلال قياس حالة التطبيق

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

يمكنك أيضًا بدء التتبُّع وإيقافه في محلّل وحدة المعالجة المركزية (CPU) بدون قياس رمز التطبيق.

قبل بدء إنشاء سجلات التتبّع، تأكَّد من أنّ تطبيقك قد أضاف منطقًا لحفظ سجلات التتبّع في الدليل الخاص بالتطبيق .

قياس أداء تطبيقك

لإنشاء سجلّات تتبُّع، اتصل بـ startMethodTracing() حيث تريد أن يبدأ النظام في تسجيل بيانات التتبُّع.

وفي المكالمة، يمكنك تحديد اسم .trace، ويحفظه النظام في حزمة خاصة بالحزمة الذي يستهدف بيانات التطبيق الدائمة على الجهاز المستهدف، وهو نفس الدليل الذي يتم عرضه بواسطة getExternalFilesDir() وتتوفّر في دليل ~/sdcard/ على معظم الأجهزة يحتوي هذا الملف على بيانات تتبُّع الطريقة الثنائية وجدول ربط يحتوي على سلسلة محادثات. وأسماء الطرق. لإيقاف التتبّع، يُرجى الاتصال stopMethodTracing()

يبدأ المثال التالي تسجيل سجلّ تتبُّع وإيقافه بالاسم sample.trace:

Kotlin

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample")

// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing()

Java

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample");
...
// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing();

يُرجى ملاحظة أنّه إذا استدعِ التطبيق startMethodTracing() مرة أخرى بدون تغيير اسم سجل التتبُّع، يستبدل السجلّ الحالي تم حفظه على الجهاز. للتعرّف على كيفية تغيير اسم كل ملف trace log ديناميكيًا، انتقِل إلى القسم المعنيّ بحفظ عدة سجلّات.

إذا وصل النظام إلى الحد الأقصى لحجم للمخزن المؤقت قبل الاتصال stopMethodTracing()، يتوقف النظام عن التتبع ويرسل إشعارًا إلى وحدة التحكم. تعمل الطرق التي تبدأ عمليات التتبّع وتوقِفها على مستوى عملية تطبيقك بالكامل. وهذا يعني أنّه يمكنك استدعاء startMethodTracing() في onCreate(Bundle) طريقة نشاطك، واستدعاء stopMethodTracing() في onDestroy() طريقة ذلك النشاط.

تجدر الإشارة إلى أنّ تطبيقك يعمل بشكل أبطأ عند تفعيل التحليل. أي أنك عدم استخدام بيانات التحليل لتحديد التوقيتات المطلقة (مثل " يستغرق تشغيل "foo()" 2.5 ثانية"). لا تكون معلومات التوقيت في سجلّات التتبّع مفيدة إلا عند مقارنتها بسجلّات التتبّع السابقة، حتى تتمكّن من معرفة ما إذا كانت التغييرات الأخيرة تجعل تطبيقك أسرع أو أبطأ.

عند نشر التطبيقات على الأجهزة التي تعمل بالإصدار 5.0 من نظام التشغيل Android (المستوى 21 من واجهة برمجة التطبيقات) والإصدارات الأحدث، يمكنك: استخدام التحليل المستند إلى العيّنات للحصول على ملف مع تأثير أقل في الأداء في وقت التشغيل. إلى تمكين تحليل نموذج، استدعاء startMethodTracingSampling() (بدلاً من استدعاء startMethodTracing()) باستخدام عيّنة محدّدة الفاصل. يجمع النظام عيّنات بشكل دوري إلى أن يستدعي تطبيقك stopMethodTracing().

حفظ سجلات متعددة

إذا بدأ تطبيقك عملية تتبُّع إحدى الطرق وأوقفها عدة مرات بدون تحديد اسم جديد لسجلّ التتبُّع، سيحلّ الجهاز سجلّ التتبُّع الجديد محلّ سجلّ التتبُّع القديم، أي أنّه يحتفظ بسجلّ التتبُّع الأخير فقط. لحفظ عدة سجلات تتبُّع على جهازك، أعِد تسمية سجلّ التتبُّع ديناميكيًا في كل مرة يُطلِق فيها تطبيقك startMethodTracing(). يستخدم العيّنة أدناه فئة SimpleDateFormat لتضمين التاريخ والوقت الحاليَين عند تسمية كل سجلّ تتبُّع:

Kotlin

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault())
val logDate: String = dateFormat.format(Date())
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing("sample-$logDate")

Java

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
SimpleDateFormat dateFormat =
        new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault());
String logDate = dateFormat.format(new Date());
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing(
        "sample-" + logDate);

الوصول إلى سجلات التتبُّع على الجهاز

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

  • استخدام "مستكشف الأجهزة" لفتح "مستكشف الأجهزة"، انقر على عرض > نوافذ الأدوات > Device Explorer (أو انقر على مستكشف الأجهزة في شريط نافذة الأدوات). كما هو موضّح في الشكل 1، يمكنك تحديد موقع ملفات .trace من خلال الانتقال إلى دليل التطبيق المخصّص للحزمة.

    الشكل 1: تحديد موقع سجلّات التتبُّع باستخدام "مستكشف الأجهزة"

  • انسخ الملف إلى جهازك المحلي باستخدام الأمر adb pull. ينسخ الأمر أدناه سجلّ تتبُّع باسم sample.trace من الجهاز إلى دليل ~/Documents/trace-logs/ على جهازك المحلي.

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/

يمكنك بعد ذلك استيراد ملف التتبُّع باستخدام أداة تحليل أداء وحدة المعالجة المركزية.