بهبود عملکرد برنامه های اندروید با Android Profilers
یکی از سؤالاتی که ممکن است برنامه نویسان اندروید بپرسند این ست که اگر کاربران احساس کنند اپلیکیشن آنها کُند کار می کند چه کاری می توانند بکنند؟ دلایل مختلفی باعث عملکرد بد اپلیکیشن های اندرویدی می شود که می توان به مواردی مانند UI، استفاده نادرست از CPU، مصرف بی رویه از حافظه و … اشاره کرد که در اندروید استودیو 3.0 بخشی برای بهبود عملکرد برنامه به نام Profiler قرار گرفته است.
در این مقاله ما راجع به Profiler صحبت می کنیم. Profiler مجموعه ای از ابزارها برای explorer، بهینه سازی و عیب یابی عملکرد برنامه می باشد که از اندروید استودیو 3 به بالا جایگزین Android Monitor شده است.
ابزارهایی که در Android Profiler وجود دارد باعث می شود که ما درک بهتری از شیوه استفاده برنامه از مصرف Cpu، حافظه، شبکه، باتری و … داشته باشیم تا از این طریق بتوانیم مشکلات اپلیکیشن اندرویدی خود را برطرف کنیم.
Profiler در اندروید استودیو شامل موارد زیر می باشد:
- Network Profiler
- Energy Profiler
- Memory Profiler
- CPU Profiler
بررسی اجمالی
برای باز کردن پنجره Profiler به مسیر زیر می رویم.
View > Tool Windows > Profiler
راه دیگر اجرای آن، کلیک روی آیکن در نوار ابزار می باشد.
برای بررسی برنامه، ما نیاز به Build و اجرای برنامه داریم تا بتوانیم بوسیله Android Profiler منابعی که برنامه استفاده می کند را ببینیم و این کار تا زمانی که از برنامه خارج نشده ایم ادامه دارد.
صفحه اصلی Profiler آمار استفاده از CPU، شبکه، حافظه و باتری را در همان لحظه نمایش می دهد. ما می توانیم با کلیک روی هر یک از نمودارها، نمای دقیق تری از هر کدام را مشاهده کنیم. در زیر نمای کلی از آنچه که در Profiler وجود دارد نمایش داده شده است.
1- Android Profiler روند دستگاهی را که اکنون در حال Profile شدن است را نمایش می دهد.
2- در بخش Sessions می توانید session ی را برای مشاهده کلیک کنید یا یک profile session را شروع کنید.
3- با استفاده از دکمه بزرگنمایی می توان مقدار زمان بندی را کنترل کرد. می توان از دکمه Attach to Live برای پرش به بروزرسانی های زمان واقعی استفاده کرد.
4- تایم لاین مربوط به رویدادهای ورودی کاربر را نمایش می دهد که می توان این رویدادها را ورودی از صفحه کلید، تغییرات کنترل صدا، چرخش صفحه و … نام برد.
5- نمایش تایم لاین به اشتراک گذاشته شده که شامل نمودارهایی برای CPU، حافظه، شبکه و باتری است.
Network Profiler
Network Profiler نمای کلی از سطح شبکه ی اپلیکیشن انتخاب شده را نمایش می دهد. در این قسمت ما می توانیم اطلاعات تفصیلی در مورد درخواست ها را ببینیم. Network Profiler فعالیت شبکه را در یک زمان واقعی نمایش می دهد که این داده ها شامل داده های ارسال شده، دریافت شده و همچنین تعداد اتصالات فعلی می باشد.
Network Profiler به شما امکان می دهد تا زمان انتقال داده های برنامه خود را بررسی کنید و برنامه خود را با توجه به آن بهینه تر کنید. در این قسمت شما می توانید وابستگی ها و گراف فعالیت واقعی شبکه که شامل بایت های ارسال شده و دریافت شده می باشد را مشاهده کنید. در صورتی که درخواست های شبکه ادامه داشته باشد گراف نیز ادامه می یابد.
در بالا و سمت راست پنجره می توانید دکمه های بزرگنمایی و مکث برنامه برای بررسی یک کد خاص را ببینید. پس از انتخاب شروع و پایان بخشی از گراف تصویری مشابه عکس زیر می بینید:
این پنجره شامل تب Connection View است که لیستی از درخواستها را بر حسب اندازه داده ها، زمان گرفته شده، وضعیت درخواست، پاسخ و … را لیست می کند.
اگر می خواهید داده های یک درخواست را بررسی کنید کافیست روی رویداد در Connection View کلیک کنید و تا در سمت راست پنجره یک بخش برای جزئیات و درخواست ها به صورت زیر نمایش داده شود.
در پاسخ به درخواست فراخوانی داده های شبکه، اطلاعات فراخوانی مربوط به پشته، ظرفیت بار و … در این صفحه نشان داده می شود.
بدون هیچ interceptor، شما میتوانید کل درخواست، بدنه پاسخ و جزئیات دیگر را ببینید. همچنین تصاویر را در صورت موجود نمایش میدهد و دارای syntax برای فرمتهای xml و JSON است.
Energy Profiler
Energy Profiler به ما کمک می کند تا مشکلات مربوط به انرژی و مصرف باتری را مشاهده کنیم. این قسمت مصرف باتری اجزای مختلف را نمایش می دهد.
Energy Profiler استفاده از CPU، شبکه رادیویی و سنسور GPS را نظارت می کند و یک تصویر سازی از میزان مصرف باتری از هر کدام از مؤلفهها را نمایش می دهد.
ما می توانیم رویدادهایی که در پس زمینه اجرا می شود را بررسی کنیم گاهی این برنامه ها باعث خالی شدن باتری گوشی می شود. همچنین می توانیم از Energy Profiler برای یافتن رویدادهای سیستمی که بر مصرف باتری تأثیر می گذارد استفاده کنیم که می توان به job، wake locks، alarm و … اشاره کرد.
Energy Profiler مانند تصویر زیر است:
با باز کردن پنجره System Event می توانید جزئیات مربوط به رویدادها، job ها یا فراخوانی های شبکه یا wake locks را مشاهده کنید. در صورتی که یک محدوده را از تایم لاین مربوط به Energy انتخاب کنید می توانید جزئیات بیشتری را از آن رویداد ببینید. به عنوان مثال در عکس فوق ما برای بررسی بیشتر یک job می توانیم با انتخاب محدوده مورد نظر، جزئیات را در پنل سمت راست همراه با فراخوانی پشته مشاهده کنیم.
Memory Profiler
Memory Profiler مؤلفهای است که به ما در جلوگیری از سرریز شدن حافظه، کند کار کردن یا وقفه های پیاپی در برنامه و کرش کردن برنامه کمک می کند.
گراف تایم لاین، مصرف برنامه از حافظه را نمایش می دهد و به شما امکان می دهد اجزای بدون استفاده که باعث مصرف حافظه شده اند را جمع آوری کرده و با بستن اجباری آنها حافظه را آزاد کنید.
گاهی اوقات که در حال توسعه برنامه هستیم ممکن است با سرریزی حافظه روبرو شویم. این مشکل به دلیل عدم آزاد سازی حافظه با داده های بلااستفاده می باشد هر چند که سیستم عامل اندروید از تخصیص حافظه به این داده ها مراقبت می کند ولی گاهی ممکن است حافظه بیشتری را به داده ها اختصاص دهیم و باعث سرریز شدن حافظه شویم. این رویداد ممکن است قبل از آزاد سازی فضا از داده های بلااستفاده اتفاق بیفتد که می تواند باعث قفل کردن برنامه، وقفه های پی در پی یا کرش کردن برنامه شود.
گاهی ممکن است ما کل حافظه را مصرف کنیم در حالی که برنامه در پسزمینه در حال اجراست دراینصورت برنامه بدون از سرگیری منجر به راهاندازی مجدد توسط سیستم میشود.
برای جلوگیری از این مشکلات می توانید از Memory Profiler برای موارد زیر استفاده کنید:
- از طریق تایم لاین می توانید حافظه هایی که به داده های بلا استفاده تخصیص داده شده است را شناسایی کنید که روی عملکرد صحیح برنامه تأثیر می گذارد.
- با باز کردن پشته جاوا متوجه می شوید که هر شی در هر زمان چه مقدار از حافظه را استفاده می کند. در صورتی که در زمان های مختلف این قسمت را چک کنید می توانید متوجه شوید کدام شی باعث سرریز شدن حافظه می شود.
- تخصیص حافظه را در هنگام تعامل یک کاربر و حداکثر کاربران ثبت کنید تا مشخص شود که حافظه در یک زمان به چه اشیایی تخصیص داده می شود و در چه زمانی سرریز می شود.
1- دکمه ای برای بستن مجموعه اشیاء بی استفاده
2- دکمه ای برای گرفتن تصویر از heap dump
3- دکمه ای برای ثبت تخصیص حافظه که در سمت راست دکمه heap dump ظاهر می شود و فقط زمانی که به دستگاه اندروید ورژن 7.1 (سطح API 25) به پایین باشد ظاهر می شود.
4- دکمه های بزرگنمایی و کوچک نمایی در تایم لاین
5- منوی کشویی برای مشخص کردن اینکه profiler مرتباً تخصیص حافظه را ثبت میکند یا نه. انتخاب گزینه مناسب ممکن است به شما در بهبود عملکرد app در هنگام profiling کمک کند.
6- دکمه ای برای پرش به جلو در داده های لحظه ای حافظه
7- تایم لاین مربوط به وضعیت اکتیویتی ها که رویداد ورودی کاربر و رویداد چرخش صفحه را نشان می دهد.
8- تایم لاین استفاده شده حافظه شامل موارد زیر است:
- یک گراف پشته از این که چقدر حافظه توسط هر مقوله مورد استفاده قرار میگیرد، همانطور که توسط محور y در سمت چپ و کلید رنگ در بالا نشان داده میشود.
- خط نقطهچین تعداد اشیا اختصاص داده شده را نشان می دهد، همانطور که توسط محور y در سمت راست نشان داده شدهاست.
- آیکنی برای نمایش رویدادهای مربوط به اشیاء بی استفاده
CPU Profiler
استفاده بهینه از پردازنده در برنامه مزایای زیادی دارد که می توان به سریع و روان عمل کردن برنامه و عمر بیشتر باتری اشاره کرد.
شما می توانید از CPU Profiler برای بررسی استفاده CPU در برنامه و فعالیت ها استفاده کنید همچنین می توانید با استفاده از CPU Profiler’s Android جزییات میزان استفاده از CPU را ردیابی کنید و به بهبود برنامه و عملکرد درست آن کمک کنید.
از منوی کشویی یک گزینه را انتخاب کنید، روی دکمه record کلیک کنید حالا با برنامه کار کنید و سپس روی دکمه Stop کلیک کنید.
CPU Profiler به صورت خودکار محدوده ضبط شده را نمایش می دهد و شما می توانید اطلاعات ثبت شده را در قسمت trace مشاهده کنید. پس از ثبت فعالیت می توانید ردیابی را برای بررسی بعدی صادر کنید همچنین می توانید با کلیک روی + که در منوی بالا سمت چپ قرار دارد ردیابی ها را import کنیم.
ما می توانیم بررسی کنیم که چقدر زمان طول می کشد تا هر فریم به درستی روی موقعیت اصلی خود قرار بگیرد و اجرا شود. RenderThread برای بررسی تنگناهایی است که باعث عملکرد بد UI و سرعت پایین فریم ها می شود.
برای دیدن داده های فریم، می توانید از record a trace برای فراخوانی های سیستم و ثبت آن استفاده کنید. پس از ثبت آن می توانید در بخشی که مربوط به Frames است اطلاعات مربوط به هر فریم را ببینید.
نتیجه گیری
امیدواریم با مطالعه این مقاله بتوانید مشکلات اپلیکیشن های اندرویدی خود را برطرف کنید. همچنین در مصرف اپلیکیشن خود از حافظه، توجه و دقت کافی را داشته باشید و از تخصیص منابع به اشیاء غیرضروی بپرهیزید تا گراف مصرف حافظه تا حد امکان مسطح باشد.
دیدگاهتان را بنویسید