ممکن است دلایل زیادی از جمله استفاده بد از cpu، مصرف بیرویه حافظه، اجرای نادرست منابع باتری و غیره وجود داشته باشد. برای اشکال زدایی وغلبه به این موارد در اندروید استدیو 3.0 بخشی به نام Android Profiler وجود دارد.
در این مقاله مروری بر profiler خواهیم داشت.
Profiler مجموعهای از ابزارها برای کاوش، بهینه سازی و عیبیابی عملکرد است. بخش Android Profiler در اندروید استدیو نسخه 3.0 و بالاتر جایگزین ابزار Android Monitor شده است.
ابزارهای Android profiler اطلاعاتی را در زمان واقعی ارائه میدهند تا به ما در درک اینکه برنامه ما چگونه از cpu، حافظه، شبکه و منابع باتری استفاده میکند کمک کند. بگذارید profilerهای موجود در اندروید استودیو را بررسی کنیم.
- Network Profiler
- Energy Profiler
- Memory Profiler
- CPU Profiler
دید کلی
برای بازکردن پنجره profiler، گزینه View > Tool Windows > Profiler را انتخاب کنید و یا بر روی آیکون profiler در نوار ابزار کلیک کنید.
برای بازرسی برنامه، ما نیاز به ساخت و استقرار برنامه داریم. Android Profiler تا زمانی که دستگاه را جدا نکنید یا روی end session کلیک کنید، جمع آوری داده پروفایل را ادامه میدهد.
نمای اصلی profiler آمار استفاده از CPU، شبکه، حافظه و انرژی را در زمان واقعی نشان میدهد. با کلیک بر روی هر یک از نمودارها، ما را به دیدن جزئیات هر بخش میرساند.
بیایید یک نمای کلی از آنچه در بخش profiler به نظر میرسد داشته باشیم.
- Android Profiler فرایند دستگاهی را که اکنون در حال profile شدن است را نشان میدهد.
- در صفحه sessions انتخاب کنید که کدام session نمایش داده شود و یا یک profiling session جدید را شروع کنید
- از دکمهها بزرگمایی برای کنترل میزان نمایش جدول زمانی استفاده کنید، یا برای پرش به بروزرسانی در زمان واقعی از دکمه Attach استفاده کنید
- جدول زمانی رویداد مرتبط با ورودی کاربر را نشان میدهد، از جمله فعالیت صفحه کلید، تغییرات کنترل صدا و چرخش صفحه
- نمای جدول زمانی مشترک که شامل نمودارهایی برای cpu، حافظه، شبکه و مصرف انرژی است
Network Profiler
Network profiler یک نمای کلی از سطح شبکه برنامه انتخابی را نشان میدهد. Network profiler فعالیت شبکه در زمان واقعی را در یک جدول زمانی نمایش میدهد، دادههای ارسال شده و دریافت شده و همچنین تعداد اتصالات فعلی را نشان میدهد.
این به شما امکان میدهد چگونگی و زمان انتقال دادههای برنامه خود را بررسی کنید و کدها را به طور مناسب بهینه کنید. همچنین یک نمای thread وجود دارد که میتوانیم ببینیم کار در کجا انجام میشود.
نمودار، فعالیت شبکه شامل بایتهای ارسال شده و دریافت شده را نشان میدهد. در صورت وقوع درخواست شبکه نمودار حرکت میکند.
در گوشه بالا سمت راست، میتوانید دکمه بزرگنمایی و مکث را برای بازرسی از یک کد خاص پیدا کنید. پس از انتخاب بخشی از ph نمایی شبیه به زیر نمایش داده میشود:
این بخش، کلیه درخواستهای اتصال را با جدول زمانی خود در آن بخش انتخاب شده از جمله اندازه داده، زمان گرفته شده و غیره لیست میکند.
اگر میخواهید دادههای یک درخواست را بازرسی کنید، بر روی رویداد در نمای اتصال کلیک کنید و سپس در سمت راست، یک پنجره با جزئیات درخواست به شرح زیر نمایش داده میشود.
این دادههای واقعی از پاسخ به درخواست شبکه: همراه با پشته، بسته داده و غیره را نمایش میدهد.
بدون هیچ رهگیری، اکنون میتوانید کل درخواست، بدنه پاسخ و سایر جزئیات درخواست را مشاهده کنید. همچنین تصاویر را در صورت موجود بودن نشان میدهد و دارای syntax برای فرمتهای xml و JSON است.
Energy Profiler
Energy profiler به ما کمک میکند تا مشکلاتی را که میتواند باعث ایجاد مشکلات مربوط به انرژی شود را پیدا کنیم. این تجزیه و تحلیل، تقسیم مصرف انرژی برآورده شده برنامهها از اجزاء سیستم را نشان میدهد.
Energy profiler بر استفاده از CPU، رادیو، شبکه و سنسور GPS نظارت میکند و تصویری از میزان انرژی هر یک از این مولفهها را نشان میدهد.
ما میتوانیم رویدادهای پسزمینهای که ممکن است باعث تخلیه باتری شود را بررسی کنیم. همچنین میتوانیم از Energy Profiler برای یافتن وقایع سیستمی استفاده کنیم که میتواند بر مصرف انرژی تاثیر بگذارد، از جمله wake lock، jobs و زنگ هشدار و غیره.
Energy profiler همانند شکل زیر است:
اگر صفحه رویداد سیستم را باز کنید، جزئیات مربوط به رویدادها را مشاهده میکنید، از جمله job یا فراخوانیهای شبکه یا wake lock را نشان داده و در جدول زمانی انرژی میتوانید محدودهای را انتخاب کنید.
این جزئیات رویداد را نشان میدهد. برای مثال در عکس بالا، یک job را بررسی کردیم که جزئیات job را در صفحه سمت راست با پشته فراخوانی نمایش میدهد.
Memory Profile
Memory profile مولفهای است که به ما کمک میکند نشت حافظه را شناسایی کنیم که میتواند منجر به گیر کردن، فریز شدن و یا حتی خرابی برنامه میشود.
این نمودار در زمان واقعی استفاده از حافظه برنامه شما را نشان میدهد و به شما امکان میدهد مجموعهای از زبالهها(اجزائی که بدون استفاده در حافظه باقی ماندهاند) را جمعآوری کنید، garbage collections را به زور اجرا کنید و تخصیص حافظه را ردیابی کنید.
در حالی که برنامههای خود را توسعه میدهیم، بعضا به دلایل بسیاری با نشت حافظه روبرو میشویم.
یکی از مهمترین دلایل آن، عدم جمع آوری زباله در اشیاء بلااستفاده است. حتی اگر سیستم اندروید از تخصیص حافظه و جمع آوری زبالهها مراقبت کند، ممکن است در بعضی مواقع این احتمال وجود داشته باشد که حافظه بیشتری به برخی از اشیاء اختصاص دهیم.
این ممکن است حتی قبل از اینکه garbage collector اشیاء قبلی را پاک کند رخ دهد که ممکن است باعث یخ زدن برنامه، پرش فریم یا خرابی و غیره شود.
بعضی اوقات ممکن است حتی در حالی که برنامه در حالت پسزمینه قرار دارد، حافظه را نیز مصرف کنیم، که در نتیجه بدون از سرگیری برنامه توسط سیستم مجدد شروع مجدد میشود.
برای جلوگیری از بروز این مشکلات، باید از memory profile برای موارد زیر استفاده کنیم:
- به دنبال الگوهای تخصیص ناخواسته حافظه در جدول زمانی باشید که ممکن است باعث مشکلات در کارایی برنامه شود
- پشته جاوا را باز کنید تا ببینید که اشیاء در یک زمان معین چقدر از حافظه استفاده میکنند. چندین بار استفاده از این روش در یک دوره میتواند باعث شناسایی نشت حافظه شود
- تخصیص حافظه را در طول تعامل با کاربر عادی و شدید ثبت کنید تا دقیقا مشخص کنید که کد شما در یک زمان کوتاه، کجا به تعداد زیادی از اشیاء حافظه اختصاص میدهد یا تخصیص حافظه به اشیائی که باعث نشت حافظه میشوند را شناسایی کنید.
- دکمهای برای اینکه garbage collection را به زور اجرا کنیم
- دکمهای برای ضبط heap dump
- نکته: دکمهای برای ضبط تخصیص حافظه در سمت راست فقط هنگامی که به دستگاهی با اندروید 7.0 یا پایینتر (سطح Api 25) متصل هستید، ظاهر میشود.
- دکمهای برای بزرگنمایی/کوچکنمایی جدول زمانی
- یک منوی کشویی برای مشخص کردن اینکه چند بار تخصیص حافظه را ضبط کند. انتخاب گزینه مناسب ممکن است به شما در بهبود عملکرد برنامه در حین پروفایل کردن کمک کند
- دکمهای برای پرش به جلو در دادههای زنده حافظه
- جدول زمانی رویداد، وضعیت فعالیت، رویدادهای ورودی کاربر و رویدادهای چرخش صفحه را نشان میدهد
- جدول زمانی استفاده از حافظه، که شامل موارد زیر است:
- نمودار پشتهای از میزان حافظه توسط هر دسته از حافظه، همانطور که توسط محور y در سمت چپ و کلید رنگی در بالا نشان داده شده است
- خط بریده بریده شده تعداد اشیاء اختصاص داده شده را نشان میدهد، همانطور که در محور y در سمت راست نشان داده شده است
- آیکونی برای هر رویداد garbage collection
CPU Profiler
بهینه سازی استفاده از CPU در برنامه ما دارای مزایای بسیاری است، ازجمله ارائه تجربه کاربری سریعتر و نرمتر و حفظ عمر باتری دستگاه.
میتوانید از CPU Profiler استفاده کنید تا استفاده CPU در برنامه خود، استفاده از فعالیت thread در زمان واقعی را بررسی کنید، یا میتوانید جزئیات اندروید CPU Profiler در روش ضبط شده، ردیابی عملکرد، ردیابی سیستم بررسی کنید.
با انتخاب یکی از گزینههای کشویی، بر روی دکمه ضبط کلیک کنید. مدتی با برنامه تعامل داشته باشید و سپس دکمه توقف را بزنید.
CPU profiler به طور خودکار محدوده زمانی ضبط شده را انتخاب میکند و اطلاعات ردیابی آن را در صفحه ردیابی نشان میدهد. پس از ثبت فعالیت میتوانیم برای بازرسیهای بعدی ردپاها را خارج کنیم. میتوانیم با ضربه زدن به + در فهرست سمت چپ ردپاها را وارد کنیم.
ما میتوانیم بررسی کنیم که چقدر طول میکشد تا یک برنامه هر فریم را روی thread اصلی و RenderThread رندر کند، تا تنگناهایی که باعث تکان دادن ui و نرخ فریم پایین شوند را بررسی کنیم.
برای دیدن دادههای ارائه دهنده فریم، با استفاده از پیکربندی میتوانید فراخوانیهای سیستم را ردیابی و آن را ضبط کنید. پس از ضبط ردیابی در زیر بخشی به نام FRAMES به دنبال اطلاعات در مورد هر فریم باشید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید