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

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

يمكنك أيضًا بدء التتبُّع وإيقافه في محلّل وحدة المعالجة المركزية (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() مجددًا بدون تغيير اسم سجلّ التتبُّع، سيتم استبدال السجلّ الحالي المحفوظ على الجهاز. وللتعرُّف على كيفية التغيير الديناميكي لاسم كل سجل تتبع، انتقِل إلى القسم المتعلق بحفظ سجلات متعددة.

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

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

عند النشر على أجهزة تعمل بنظام التشغيل Android 5.0 (المستوى 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 لفتح "مستكشف الأجهزة"، انقر على عرض > أداة Windows > Device Explorer (أو انقر على الزر مستكشف الأجهزة في شريط نوافذ الأدوات). كما هو موضّح في الشكل 1، يمكنك تحديد موقع ملفات .trace بالانتقال إلى الدليل الخاص بحزمة تطبيقك.

    الشكل 1. تحديد موقع سجلات التتبُّع باستخدام Device Explorer.

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

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

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