Traceview: چیست، ابزار ردیابی و پروفایل‌سازی اندروید

نویسنده: IT Sectr منتشر شده: 2026-03-30 زمان مطالعه: 9 دقیقه

Traceview — یک ابزار ردیابی گرافیکی داخلی در Android Studio است که اجرای متدهای برنامه را از نظر زمان و منابع CPU ضبط و بصری‌سازی می‌کند. برخلاف Systrace که فرآیندهای سیستمی را در سطح هسته نشان می‌دهد، Traceview بر متدهای Java و Kotlin داخل برنامه تمرکز دارد که از ورودی کاربر تا رندر UI به صورت زنجیره‌ای فراخوانی می‌شوند. به گفته Google, 2024، این ابزار امکان یافتن تنگناهای عملکرد در سطح فراخوانی‌های جداگانه و بهینه‌سازی کد قبل از انتشار را فراهم می‌کند.

نکات کلیدی

  • Traceview — پروفایلر گرافیکی متدهای اندروید در Android Studio که بر اساس System Tracing کار می‌کند
  • ردیابی مدت زمان هر متد، تعداد فراخوانی‌ها و زمان CPU را ضبط می‌کند
  • تایم‌لاین Traceview فراخوانی‌ها را به ترتیب زمانی با تودرتو بودن نخ‌ها نمایش می‌دهد
  • پروفایل‌سازی به یافتن متدهای کند، تخصیص‌های اضافی و قفل‌ها کمک می‌کند
  • ادغام با Android Profiler و Debug.startMethodTracing API برای ضبط انعطاف‌پذیر

Traceview در اندروید چیست

Traceview — یک پروفایلر گرافیکی داخلی در Android Studio است که ردهای اجرای متدهای برنامه اندروید را به صورت تایم‌لاین و جدول فراخوانی‌ها نمایش می‌دهد. این ابزار بخشی از Android SDK است و از Android Studio 3.0 به بعد از طریق Android Profiler و همچنین از طریق ابزار خط فرمان dmtracedump در دسترس است.

هدف ابزار

وظیفه اصلی Traceview کمک به برنامه‌نویس برای یافتن متدهایی است که بیشترین زمان CPU را مصرف می‌کنند. برخلاف لاگ‌گیری ساده، Traceview زمان دقیق ورود و خروج از هر متد را ضبط می‌کند، Call Chart و درخت Top-Down می‌سازد که امکان تشخیص بصری ناهنجاری‌های عملکرد را فراهم می‌کند. این ابزار به ویژه در پروفایل‌سازی نخ UI مفید است، جایی که تأخیر 16 میلی‌ثانیه‌ای منجر به افت فریم می‌شود.

تاریخچه و توسعه

Traceview در نسخه‌های اولیه Android SDK به عنوان یک ابزار مستقل برای مشاهده فایل‌های .trace ظاهر شد. با انتشار Android Studio 3.0 (2017) بخشی از Android Profiler شد و ادغام با تایم‌لاین زنده CPU، حافظه و شبکه را به دست آورد. به گفته Google I/O 2018، تیم Android Studio به توسعه پروفایلر ادامه می‌دهد و پشتیبانی از کد بومی را از طریق systrace و perfetto اضافه می‌کند. در نسخه‌های فعلی Android Studio، Traceview روی قالب Perfetto کار می‌کند اما سازگاری معکوس با .trace کلاسیک را حفظ می‌کند.

Traceview چگونه کار می‌کند

Traceview داده‌ها را از مکانیزم System Tracing در Android Runtime (ART) دریافت می‌کند. هنگامی که برنامه با ردیابی فعال اجرا می‌شود، ART زمان شروع و پایان هر متد اجرا شده را در یک بافر می‌نویسد، از جمله نام کلاس، نام متد و ID نخ.

kotlin
// شروع tracing در کد برنامه
Debug.startMethodTracing("app_trace")

// بخش حیاتی کد برای پروفایل‌سازی
loadHeavyData()

// توقف tracing — فایل روی دستگاه ذخیره شد
Debug.stopMethodTracing()

System Tracing در سطح ماشین مجازی ART کار می‌کند و هر فراخوانی متد را با دقت میکروثانیه ثبت می‌کند. داده‌ها در یک بافر حلقوی نوشته می‌شوند تا تأثیر بر عملکرد خود برنامه به حداقل برسد. پس از توقف ردیابی، بافر در یک فایل .trace در حافظه داخلی دستگاه تخلیه می‌شود.

فرمت فایل .trace

فایل .trace شامل یک هدر با نسخه فرمت و زمان شروع است و به دنبال آن رکوردهایی درباره هر فراخوانی: thread ID، method ID، timestamp ورود و timestamp خروج. Android Studio به طور خودکار فایل .trace را بارگیری می‌کند و دو نمای اصلی می‌سازد: Timeline Panel برای ترتیب زمانی و Profile Panel برای سلسله‌مراتب فراخوانی‌ها. به طور پیش‌فرض حداکثر اندازه بافر 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 از جستجو بر اساس نام متد، بسته یا کلاس پشتیبانی می‌کند. نتایج در تایم‌لاین برجسته می‌شوند و در Profile Panel آمار فقط برای متدهای یافت شده نمایش داده می‌شود. فیلتر بر اساس نخ‌ها نیز در دسترس است — می‌توان نمایش نخ‌های پس‌زمینه را غیرفعال کرد و روی نخ اصلی (UI) تمرکز کرد، جایی که تأخیرها بحرانی‌ترین هستند.

معیارتوضیحواحد
Inclusive Timeزمان کل متد + تمام فراخوانی‌های فرزند آنµs / ms
Exclusive Timeزمان فقط خود متد بدون فراخوانی‌های فرزندµs / ms
Calls + Recurتعداد فراخوانی‌ها با در نظر گرفتن بازگشتتعداد
CPU Timeزمان واقعی صرف شده روی CPU (بدون انتظار)µs / ms
Real Timeزمان تقویمی از ورود تا خروج از متدµs / ms

صادرات داده

Traceview امکان صادرات ردها را در قالب CSV برای تحلیل بعدی در جداول یا رسم نمودارها فراهم می‌کند. در Android Studio می‌توان یک قطعه انتخاب شده از تایم‌لاین را به عنوان تصویر کپی کرد — برای درج در گزارش باگ یا مستندات. برای CI/CD صادرات در قالب Perfetto از طریق ابزار cmdline-tools در دسترس است.

نحوه استفاده از Traceview در Android Studio

پروفایل‌سازی از طریق Traceview به دو روش در دسترس است: از طریق Android Profiler با ضبط زنده و از طریق راه‌اندازی برنامه‌ریزی شده Debug API. روش اول برای تحلیل ad-hoc مناسب است، روش دوم — برای تست‌های عملکرد تکراری.

ضبط از طریق 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 ثانیه) توصیه می‌شود بافر را از طریق پارامتر maxSize به 64–128 مگابایت افزایش دهید.

خواندن تایم‌لاین Traceview

تایم‌لاین Traceview از دو پنل تشکیل شده است: بالا — Timeline Panel با مستطیل‌های رنگی فراخوانی‌ها، پایین — Profile Panel با جدول آمار. Timeline Panel اجرای نخ‌ها را از چپ به راست نشان می‌دهد، جایی که هر مستطیل یک فراخوانی متد است. رنگ مستطیل بر اساس نوع متد کدگذاری می‌شود: فراخوانی‌های سیستم اندروید (سبز)، متدهای کاربردی (آبی)، فراخوانی‌های کتابخانه (نارنجی).

نحوه خواندن Profile Panel

در Profile Panel هر سطر یک متد با ستون‌های Inclusive Time، Exclusive Time، Calls + Recur و CPU Time است. جدول را بر اساس Inclusive Time (نزولی) مرتب کنید تا ابتدا متدهایی را ببینید که مجموعاً بیشترین زمان را گرفته‌اند. اگر یک متد با Inclusive Time بالا دارای Exclusive Time پایین است — مشکل در فراخوانی‌های فرزند آن است و باید درخت را باز کنید. به عنوان مثال، ListView.getView ممکن است به دلیل فراخوانی بارگذاری تصویر دارای Inclusive Time بالایی باشد.

تشخیص تنگناها

به دنبال متدهایی با Real Time غیرعادی بالا و CPU Time پایین باشید — این نشان‌دهنده مسدود شدن (انتظار I/O، عملیات شبکه، lock contention) است. متدهای با CPU Time بالا نیاز به بهینه‌سازی الگوریتم دارند. برای نخ UI حیاتی است که هر متد در 16 میلی‌ثانیه جا شود — اگر یک فراخوانی از این حد تجاوز کند، برنامه فریم را از دست می‌دهد و کاربر لرزش می‌بیند. طبق توصیه‌های Google، مجموع زمان همه فراخوانی‌ها در نخ UI برای یک فریم نباید از 8 تا 10 میلی‌ثانیه تجاوز کند و برای عملیات‌های سیستم ذخیره باقی بماند.

مقایسه Traceview و Systrace

اگرچه هر دو Traceview و Systrace جزو ابزارهای ردیابی اندروید هستند، وظایف متفاوتی را حل می‌کنند و در مراحل مختلف پروفایل‌سازی استفاده می‌شوند. تفاوت اصلی سطح جزئیات است: 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 را در Profile Panel مقایسه کنید. اگر Glide 3x Inclusive Time کمتری برای همان کار نشان می‌دهد — این یک مبنای عینی برای انتخاب کتابخانه است. به گفته تونی جان (توسعه‌دهنده Glide، 2023)، کتابخانه از ذخیره‌سازی و استخر نخ استفاده می‌کند که تا 40٪ صرفه‌جویی در بارگذاری‌های تکراری ایجاد می‌کند.

سوالات متداول

تفاوت Traceview با Android Profiler چیست؟

Traceview — هسته بصری‌سازی ردها در داخل Android Profiler است. Profiler رابط کاربری اضافی برای شروع و توقف ضبط فراهم می‌کند، در حالی که Traceview مسئول نمایش تایم‌لاین و آمار متدها است. هر دو از همان قالب داده .trace استفاده می‌کنند.

آیا می‌توان از Traceview در دستگاه فیزیکی استفاده کرد؟

بله، Traceview هم روی شبیه‌ساز و هم روی دستگاه فیزیکی اندروید کار می‌کند. برای این کار اشکال‌زدایی 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 با تایم‌لاین و آمار به صورت جدول تولید می‌کند. در ویندوز اجرا کنید: dmtracedump -h trace.trace > report.html. جایگزین — Perfetto UI (ui.perfetto.dev) که از قالب .trace پشتیبانی می‌کند.

خلاصه

  • Traceview — پروفایلر گرافیکی متدهای اندروید برای تحلیل عملکرد در Android Studio
  • ابزار در سطح ART کار می‌کند و Inclusive و Exclusive Time هر متد Java/Kotlin را ضبط می‌کند
  • دو نمای اصلی: Call Chart برای تایم‌لاین و Profile Panel برای آمار سلسله‌مراتبی
  • ضبط از طریق Android Profiler (UI) یا برنامه‌ریزی شده از طریق Debug.startMethodTracing
  • برای نخ UI هر متد باید در 16 میلی‌ثانیه جا شود، در غیر این صورت برنامه فریم‌ها را از دست می‌دهد
  • Traceview برای کد بومی مناسب نیست — از SimplePerf یا Perfetto استفاده کنید
  • برای تصویر کامل عملکرد توصیه می‌شود Traceview و Systrace را ترکیب کنید

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید