Android Profiler — مجموعه ابزارهای داخلی Android Studio برای نظارت بر عملکرد برنامهها در زمان واقعی است. این ابزار به شما امکان میدهد بار CPU، مصرف حافظه، ترافیک شبکه و مصرف انرژی را بدون نصب کتابخانههای شخص ثالث ردیابی کنید. به گفته Android Developers، پروفایلر مستقیماً در IDE ادغام شده و معیارهایی با دقت میلیثانیه برای هر فرآیند در دستگاه متصل ارائه میدهد.
نکات اصلی
Android Profiler — مؤلفه Android Studio است که جایگزین Android Monitor و DDMS قدیمی شده است. این ابزار یک رابط واحد برای پروفایل کردن تمام جنبههای برنامه فراهم میکند: CPU Profiler برای تحلیل پردازنده، Memory Profiler برای کار با حافظه، Network Profiler برای درخواستهای شبکه و Energy Profiler برای مصرف انرژی. دادهها به طور خودکار هنگام اجرای برنامه از طریق Android Studio جمعآوری میشوند.
پروفایلر هم روی شبیهساز و هم روی دستگاه فیزیکی متصل از طریق USB کار میکند. طبق دادههای Google I/O 2023، Android Profiler در بیش از 70٠ پروDAژههای Android استفاده میشود و به عنوان ابزار استاندارد تشخیص عملکرد در نظر گرفته میشود. مزیت اصلی نسبت به راهحلهای شخص ثالث — یکپارچهسازی صفر: نیازی به افزودن وابستگیها در build.gradle یا تغییر کد برنامه نیست.
معماری Android Profiler بر پایه Perfetto — ردیاب سیستمی Android که دادهها را در سطح هسته و برنامه جمعآوری میکند — ساخته شده است. Perfetto سربار حداقلی (کمتر از 1٠ CPU) را تضمین میکند و از ضبط طولانیمدت تا 30 دقیقه پشتیبانی میکند. این امکان را میدهد نه تنها عملیات سریع، بلکه سناریوهای طولانی — انتقال بین صفحهها، همگامسازی پسزمینه، مصرف حافظه در طول یک ساعت استفاده — را نیز پروفایل کنید.
پروفایلر چهار نوع داده جمعآوری میکند: CPU — بار هر هسته و رشته، Memory — Java Heap، Native Heap، Stack، Graphics، Network — تمام درخواستهای ورودی و خروجی، Energy — دستهبندیهای مصرف انرژی (Idle، Light، Medium، Heavy). دادهها در محور زمان همگام شدهاند — میتوانید همزمان ببینید که تغییر CPU چگونه بر حافظه و مصرف انرژی تأثیر میگذارد.
CPU Profiler بار پردازنده را در زمان واقعی روی محور زمان، تقسیمبندی شده بر اساس رشتههای برنامه نشان میدهد. هر رشته با یک خط یا ناحیه رنگی نمایش داده میشود — هرچه ناحیه وسیعتر باشد، رشته زمان بیشتری از پردازنده را اشغال میکند. نواحی قرمز به معنای کار برنامه، آبی — فراخوانیهای سیستم، خاکستری — انتظار است.
برای تحلیل جزئی، CPU Profiler از سه حالت ضبط پشتیبانی میکند: Trace Java Methods (ردیابی تمام متدهای Java)، Trace C/C++ Functions (ردیابی توابع بومی NDK) و Sample Java Methods (نمونهبرداری، حالت توصیهشده). نمونهبرداری کمترین سربار را دارد و برای پروفایل روزانه مناسب است، در حالی که ردیابی کامل برای یافتن مشکلات پیچیده است.
// مثال: تحلیل CPU Profiler این متد را به عنوان bottleneck نشان خواهد داد
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// CPU Profiler بار بالای CPU را در inBackgroundThread نشان خواهد داد
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// توصیه پس از پروفایل:
// computeHeavyTransformation 80٠ زمان را میگیرد — نتیجه را کش میکنیم
class DataProcessorOptimized {
private val cache = LruCache<String, Result>(100)
suspend fun processLargeDataset(items: List<Item>): List<Result> {
return withContext(Dispatchers.Default) {
items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
}
}
}
پس از ضبط، CPU Profiler Top-Down Tree — درخت فراخوانی با زمان اجرای هر متد را نشان میدهد. به ستون Self Time/Total توجه کنید: اگر Self Time متد بیش از 16 میلیثانیه باشد و از رشته UI فراخوانی شود — این افت فریم تضمینی است. راهحل — انتقال محاسبات سنگین به رشته پسزمینه از طریق Dispatchers.IO یا Default.
Sample Java Methods — حالت توصیهشده برای پروفایل روزانه با سربار 3–5٠. Trace Java Methods — ردیابی کامل هر فراخوانی، سربار تا 15٠، برای ضبطهای کوتاه استفاده میشود (5–10 ثانیه). Trace C/C++ Functions — ردیابی کد NDK از طریق Linux Perf، برای تحلیل بازیها و کتابخانههای C++ ضروری است. با توجه به نوع مشکل، حالتها را تغییر دهید.
Memory Profiler تمام دستهبندیهای حافظه برنامه را ردیابی میکند: Java Heap (اشیاء JVM)، Native Heap (تخصیصهای C/C++ از طریق JNI)، Stack (پشتههای رشته) و Graphics (بافتها، بافرهای GPU). تجسم اصلی — نمودار زمانی مصرف حافظه، که در آن هر دستهبندی با رنگ خود نشان داده شده است. اگر نمودار پس از جمعآوری زباله (GC) کاهش نیابد — به نشت مشکوک شوید.
برای یافتن نشتها از تابع Capture Heap Dump استفاده کنید. در لحظه dump، Android Profiler برنامه را برای ~100 میلیثانیه متوقف میکند و فایل HPROF — تصویر کاملی از تمام اشیاء زنده Java Heap ایجاد میکند. پس از باز کردن dump، میتوانید اشیاء را بر اساس Retained Size (حجم حافظهای که با حذف شیء آزاد میشود) مرتب کرده و نمونههای Activity، Fragment یا Bitmap که باید نابود شدهباشند را جستجو کنید.
طبق دادههای Google I/O 2022، Memory Profiler در ترکیب با LeakCanary 95٠ سناریوهای شناسایی نشت حافظه در Android را پوشش میدهد. LeakCanary به طور خودکار کار میکند — نشت را در پسزمینه شناسایی میکند. Memory Profiler برای تحلیل دستی نیاز است: شما تصویر کاملی از تخصیصها را میبینید، نه فقط نشتها.
| دستهبندی حافظه | توضیحات | اندازه معمول |
|---|---|---|
| Java Heap | هپ JVM: اشیاء Kotlin/Java | 5–200 MB |
| Native Heap | تخصیصهای از طریق JNI، NDK | 1–100 MB |
| Graphics | بافتها، بافرهای GPU | 10–200 MB |
| Stack | پشتههای تمام رشتهها | 1–10 MB |
پس از گرفتن dump، اشیاء را بر اساس Retained Size مرتب کنید — این حجم حافظهای است که با حذف شیء آزاد میشود. به دنبال نمونههای Activity، Fragment و Bitmap با Retained Size بزرگ باشید که نباید در حافظه باشند. به برگه Reference Tree بروید تا زنجیره ارجاعات نگهدارنده شیء را ببینید — اغلب این یک فیلد استاتیک singleton یا callback پاکنشده است. معیار مهم — Allocation rate (تعداد تخصیصها در ثانیه). اگر allocation rate از 10,000 شیء/ثانیه تجاوز کند، برنامه زمان زیادی را صرف ایجاد و حذف اشیاء موقت میکند که GC را سنگین کرده و باعث میکروفریز میشود. در این مورد از ابزار View Inspector استفاده کنید و مکانهایی با ایجاد مکرر اشیاء در حلقهها را پیدا کنید.
Network Profiler تمام درخواستهای شبکه برنامه را در زمان واقعی روی محور زمان نمایش میدهد. هر درخواست به صورت یک نوار افقی نشان داده میشود — طول آن با زمان اجرا، رنگ با نوع درخواست (GET، POST، PUT، DELETE) مطابقت دارد. پیمایش محور به شما امکان میدهد ببینید درخواستها چگونه در زمان توزیع شدهاند و آیا تکراری هستند یا خیر.
تمام کتابخانههای محبوب پشتیبانی میشوند: OkHttp، Retrofit، Volley، Ktor. برای Ktor و OkHttp، پروفایلر پشته فراخوانی کامل شامل interceptors و converters را نشان میدهد. برای هر درخواست، Request Headers و Response Headers، بدنه پاسخ (تا 1 MB)، کد وضعیت و مدت زمان در دسترس است.
مشکلات معمولی که توسط Network Profiler شناسایی میشوند: عدم ذخیرهسازی کش (همان URL در هر بار باز کردن درخواست میشود)، درخواستهای تکراری (دو مؤلفه همزمان دادههای یکسان را بارگیری میکنند)، اندازه بیش از حد پاسخ (سرور 5 MB ارسال میکند در حالی که 50 KB نیاز است). Network Profiler کمک میکند چنین مشکلاتی را به معنای واقعی کلمه با یک نگاه به محور زمان ببینید.
برای شبیهسازی شبکههای کند از Network Conditioning در Android Studio استفاده کنید — این ابزار به شما امکان میدهد پهنای باند را به 3G/2G محدود کرده و تأخیر اضافه کنید. این برای آزمایش رفتار برنامه در شرایط بد شبکه، به ویژه برای برنامههایی که در مناطق با اینترنت ناپایدار کار میکنند، حیاتی است.
Energy Profiler تأثیر برنامه را بر شارژ باتری بر اساس دادههای Perfetto ارزیابی میکند. این ابزار مصرف واقعی را به میلیآمپر اندازهگیری نمیکند، بلکه هر عملیات را به یکی از پنج دسته مصرف انرژی طبقهبندی میکند: Idle، Light، Medium، High و Overloaded. محور زمان Energy Profiler با رنگ روشن میشود: سبز (بار سبک)، زرد (متوسط)، قرمز (بالا).
دلایل اصلی ظهور مناطق قرمز: WakeLock (برنامه پردازنده را فعال نگه میدارد)، Location GPS (درخواستهای مداوم مختصات با دقت بالا)، اتصالات Keep-Alive (تبادل مکرر داده با سرور)، انتقال دادههای بزرگ (ارسال فایل، استریمینگ). Energy Profiler دقیقاً نشان میدهد کدام عملیات در چه زمانی باعث اوج مصرف انرژی شده است.
طبق دادههای Android Developers، یک برنامه معمولی نباید بیش از 5٠ زمان را در دسته High بگذراند. اگر Energy Profiler مناطق قرمز را بیش از 10٠ زمان پروفایل نشان دهد — برنامه از نظر معیار Battery Drain بررسی را رد نخواهد کرد. توصیه — از WorkManager برای وظایف پسزمینه استفاده کنید، درخواستهای Location را به حداقل دقت مورد نیاز محدود کنید و درخواستهای شبکه را در batchها تجمیع کنید.
راهاندازی Android Profiler با یک کلیک انجام میشود: در Android Studio View → Tool Windows → Profiler را باز کنید یا روی آیکون Profiler در پنل راست دوبار کلیک کنید. پس از اجرای برنامه روی دستگاه متصل، Android Studio به طور خودکار به فرآیند متصل شده و جمعآوری داده را آغاز میکند. بلافاصله نمودارهای CPU، Memory، Network و Energy روی محور زمان ظاهر میشوند.
برای تحلیل دقیق، برگه مورد نظر (CPU، Memory، Network یا Energy) را انتخاب کرده و ضبط را شروع کنید. برای CPU حالت Sample Java Methods با مدت زمان ضبط 30 ثانیه را توصیه میکنم — این برای یک سناریوی معمولی کافی است. برای Memory — dump heap پس از اجرای سناریو (Capture Heap Dump). برای Network ضبط به طور خودکار شروع میشود، کافی است پس از اتمام سناریو دکمه Stop را فشار دهید.
پس از توقف ضبط، دادهها را صادر کنید: File → Save As کل جلسه را در یک فایل .perf ذخیره میکند. این برای مقایسه معیارها قبل و بعد از بهینهسازی مفید است. یک جلسه baseline در اولین نسخه پایدار ایجاد کنید و هر جلسه جدید را با آن مقایسه کنید — این تنها راه ارزیابی عینی تغییرات عملکرد است.
Android Profiler را میتوان از خط فرمان از طریق Android Studio CLI و Firebase Test Lab اجرا کرد. Firebase Test Lab از پروفایل عملکرد به عنوان بخشی از تستهای UI پشتیبانی میکند: شما معیارهای CPU، Memory و Network را همراه با نتیجه تست دریافت میکنید. pipeline را به گونهای پیکربندی کنید که هنگام کاهش معیارها به میزان 10٠ نسبت به baseline، pipeline CI تا بررسی توسط توسعهدهنده مسدود شود.
سوالات متداول
تأثیر حداقل است. Android Profiler از Perfetto برای جمعآوری داده استفاده میکند که کمتر از 1٠ سربار CPU اضافه میکند. در حالت Sample Java Methods سربار حدود 3–5٠ است که برای پروفایل سناریوها ناچیز است. ردیابی کامل متدها میتواند تا 15٠ سربار ایجاد کند، بنابراین فقط برای ضبطهای کوتاه استفاده میشود.
بله، ردیابیهای سیستم را میتوان مستقیماً از دستگاه از طریق Perfetto CLI ضبط کرد: adb shell perfetto --out /data/local/tmp/trace.perf. سپس فایل را در رابط Perfetto UI (ui.perfetto.dev) باز کنید یا برای مشاهده با نشانهگذاری کامل برنامه به Android Studio وارد کنید.
Android Profiler — یک ابزار سیستمی است که نیازی به تنظیم پروکسی ندارد. درخواستها را مستقیماً در IDE در زمینه عملکرد نشان میدهد. Charles Proxy — یک سرور پروکسی خارجی است که تحلیل جزئیتری ارائه میدهد (رهگیری ترافیک، تغییر درخواستها، ارسال مجدد). برای پروفایل عملکرد از Android Profiler، برای تحلیل قراردادهای API از Charles استفاده کنید.
قبل از اجرای سناریو (مثلاً قبل از باز کردن Activity) یک dump heap بگیرید. سناریو را اجرا کنید — Activity را باز کرده و ببندید. dump دوم را بگیرید. تعداد نمونههای زنده Activity را مقایسه کنید: اگر در dump دوم بیشتر باشد — نشت. بر اساس Retained Size مرتب کنید، Activityهای اضافی را پیدا کرده و برای تعیین علت به Reference Tree نگاه کنید.
Energy Profiler به پشتیبانی Power Profiles در سطح دستگاه و Android 8.0+ نیاز دارد. در شبیهسازها و برخی سیستمعاملها (به ویژه چینی) ممکن است دادهها موجود نباشند. راهحل — مصرف انرژی را در دستگاههای مرجع Pixel یا Samsung با سیستمعامل خام Android پروفایل کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید