با ابزار دقیق برنامه خود، لاگ های ردیابی ایجاد کنید

برای ایجاد ردیابی متد از اجرای برنامه خود، می توانید برنامه خود را با استفاده از کلاس Debug ابزارسازی کنید. ابزار دقیق برنامه خود را به این روش به شما کنترل بیشتری بر روی دقیقا زمانی که دستگاه شروع می شود و ضبط اطلاعات ردیابی را متوقف می کند. این دستگاه همچنین گزارش های ردیابی شما را با استفاده از نام هایی که شما مشخص می کنید ذخیره می کند، بنابراین بتوانید بعداً به راحتی هر گزارش را شناسایی کنید. سپس می توانید هر گزارش ردیابی را با استفاده از نمایه CPU Android Studio مشاهده کنید.

همچنین می‌توانید ردیابی را در CPU Profiler بدون ابزار دقیق کد برنامه‌تان شروع و متوقف کنید .

قبل از شروع به تولید گزارش‌های ردیابی، مطمئن شوید که برنامه شما منطقی برای ذخیره گزارش‌های ردیابی در فهرست برنامه‌های خاص خود اضافه کرده است.

برنامه خود را ابزار کنید

برای ایجاد گزارش‌های ردیابی، startMethodTracing() را فراخوانی کنید، جایی که می‌خواهید سیستم شروع به ثبت داده‌های ردیابی کند.

در فراخوانی، می‌توانید نام فایل .trace را مشخص کنید و سیستم آن را در یک پوشه مخصوص بسته ذخیره می‌کند که برای داده‌های برنامه دائمی در دستگاه هدف در نظر گرفته شده است - این همان فهرستی است که توسط getExternalFilesDir() بازگردانده می‌شود و در پوشه ~/sdcard/ در اکثر دستگاه ها قرار دارد. این فایل حاوی داده های ردیابی متد باینری و یک جدول نگاشت با رشته ها و نام های متد است. برای توقف ردیابی، stopMethodTracing() را فراخوانی کنید.

نمونه زیر ضبط یک گزارش ردیابی را با نام sample.trace شروع و متوقف می کند:

کاتلین

// 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()

جاوا

// 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() آن فعالیت فراخوانی کنید.

توجه داشته باشید که وقتی پروفایل فعال است، برنامه شما کندتر اجرا می شود. یعنی، شما نباید از داده های پروفایل برای تعیین زمان بندی مطلق استفاده کنید (مانند، "method foo() 2.5 ثانیه طول می کشد تا اجرا شود"). اطلاعات زمان‌بندی در گزارش‌های ردیابی فقط هنگام مقایسه آن با گزارش‌های ردیابی قبلی مفید است، بنابراین می‌توانید ببینید آیا تغییرات اخیر برنامه شما را سریع‌تر یا کندتر می‌کند.

هنگام استقرار در دستگاه‌های دارای Android نسخه 5.0 (سطح API 21) و بالاتر، می‌توانید از نمایه‌سازی مبتنی بر نمونه برای نمایه با تأثیر کمتری بر عملکرد زمان اجرا استفاده کنید. برای فعال کردن پروفایل نمونه، startMethodTracingSampling() (به جای فراخوانی startMethodTracing() ) را با بازه نمونه برداری مشخص فراخوانی کنید. سیستم به صورت دوره ای نمونه ها را جمع آوری می کند تا زمانی که برنامه شما stopMethodTracing() را فراخوانی کند.

چندین گزارش را ذخیره کنید

اگر برنامه شما یک ردیابی روش را چندین بار بدون تعیین نام جدیدی برای گزارش ردیابی شروع و متوقف کند، دستگاه گزارش ردیابی قدیمی‌تر را با گزارش جدید بازنویسی می‌کند - یعنی فقط آخرین گزارش ردیابی را نگه می‌دارد. برای ذخیره چندین گزارش ردیابی در دستگاه خود، هر بار که برنامه شما با startMethodTracing() تماس می گیرد، به صورت پویا نام گزارش ردیابی را تغییر دهید. نمونه زیر از کلاس SimpleDateFormat استفاده می‌کند تا تاریخ و زمان فعلی را هنگام نام‌گذاری هر گزارش ردیابی شامل شود:

کاتلین

// 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")

جاوا

// 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 استفاده کنید . برای باز کردن Device Explorer، روی View > Tool Windows > Device Explorer (یا روی 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 Profiler وارد کنید .