Android developer
بهینه سازی ANR با استفاده از StrictMode در اپلیکیشن اندروید
![](https://files.virgool.io/upload/users/472315/posts/vth88fqwec1l/qaaxslmwoe3a.jpg)
StrictMode چیست و چرا باید از آن استفاده کرد؟
StrictMode یکی از ابزارهایی است که به توسعه دهندگان کمک می کند تا از ANR جلوگیری کند و همچنین باعث می شود ANR هنگام توسعه کاهش یابد.
توضیح سایت https://developer.android.com:
استفاده از StrictMode به شما کمک می کند تا در حین توسعه اپلیکیشن، عملیات اتفاقی I/O را در رشته اصلی پیدا کنید.
ما میتوانیم از StrictMode به عنوان یک ابزار تحلیلگر استفاده کنیم که در زمان اجرا به تحلیل رشته اصلی (Main Thread) برنامه میپردازد. این ابزار بر اساس دو مدل سیاستگذاری کار میکند و اگر هر کدام از این سیاستها نقض شوند، اقدامات مربوطه را انجام میدهد.
به زبان ساده، StrictMode به ما کمک میکند تا مشکلات و عملکردهای نامناسب در برنامهنویسی را شناسایی کنیم. اگر برنامه به گونهای نوشته شده باشد که به خطاهایی مانند دسترسی به شبکه در رشته اصلی (Main Thread) یا عملیات طولانی مدت در رشته اصلی منجر شود، StrictMode میتواند این مشکلات را تشخیص داده و به ما اطلاع دهد. این ابزار از بروز مشکلات جدی در زمان اجرا جلوگیری میکند.
موارد بررسی StrictMode که هرکدام پیش بیاید باعث ایجاد ANR می شود !!
موارد رشته (Thread) که باعث ANR می شود:
- خواندن دیسک، نوشتن دیسک، شبکه، عدم تطابق منابع و کد آهسته
موارد VM که باعث ANR می شود:
- Activity Leak, SQLite Object, Closable Object, Object Leak, File URL exposure
همانطور که میدانیم، ANR (عدم پاسخگویی برنامه) همواره به وظایف پرمنبع در رشته اصلی (Main Thread) مرتبط است. بنابراین، StrictMode تمام دلایلی را که میتوانند باعث ANR شوند به عنوان نقض سیاست در نظر میگیرد و بررسی میکند.
به بیان سادهتر، StrictMode به ما کمک میکند تا عواملی که ممکن است باعث شوند برنامه به درستی پاسخ ندهد (و در نتیجه خطای ANR رخ دهد) را شناسایی کنیم و از آنها جلوگیری کنیم. این ابزار با اعمال سیاستهای مختلف، تمامی مشکلات احتمالی که ممکن است عملکرد رشته اصلی را تحت تاثیر قرار دهد، به ما گزارش میدهد.
چگونه StrictMode را پیاده سازی کنیم؟
بیاید با یک مثال عملی ببینیم.
ابتدا، میتوانیم صفحه پیش فرض «Hello world!» را با استفاده از یک text view مقداردهی اولیه کنیم.
![](https://files.virgool.io/upload/users/472315/posts/vth88fqwec1l/i2tygdc4jzqm.png)
بیایید چند عملیات سنگین روی رشته UI انجام دهیم. بنابراین ساده ترین کار این است که من یک حلقه while بنویسم و یک text view را در آن بی نهایت به روز کنم، که مطمئناً می تواند باعث ایجاد ANR شود.
![](https://files.virgool.io/upload/users/472315/posts/vth88fqwec1l/qgjmlpx8vcfs.png)
و با اجرا کردن برنامه خواهید دید که دیالوگ ANR به شما نمایش داده می شود.
اضافه کردن StrictMode :
اکنون می توانید کد فعال کننده StrictMode را به متد onCreate اکتیویتی اصلی اضافه کنید.
در اصل، این کد باید به کلاس Application اضافه شود، اما لازم نیست برای درک مفهوم آن را پیچیده تر کنیم.
![](https://files.virgool.io/upload/users/472315/posts/vth88fqwec1l/2td3aytqpxn2.png)
حالا Application را اجرا کنید و ببینید چه اتقافی می افتد!!
وقتی ما StrictMode را فعال کردیم، به جای دیالوگ ANR، برنامه بلافاصله به بیرون میپرد یا همان crashed می کند و دیتاهای StrictMode در Logs ثبت می شود.
سوال :
آیا باید StrictMode رو یکی یکی به اکتیویتی و فرگمنت ها اضافه کنیم تا فعال بشه ؟
جواب خیر است !! کدهای مربوطه را در کلاس Application
برنامه اضافه کنید تا StrictMode برای کل اپلیکیشن فعال شود.
![](https://files.virgool.io/upload/users/472315/posts/vth88fqwec1l/oss48uxpiypk.png)
سپس باید کلاس Application
سفارشی خود را در فایل AndroidManifest.xml
ثبت کنید:
![](https://files.virgool.io/upload/users/472315/posts/vth88fqwec1l/zcekgimytvb1.png)
نتیجهگیری:
اندروید در مدیریت بسیاری از مشکلاتی که توسط برنامهها در زمان اجرا ایجاد میشوند، عالی عمل میکند و در مورد ANR نیز با نگه داشتن 5 ثانیه به خوبی عمل میکند.
اما مسئولیت برنامهنویس است که استانداردهای برنامهنویسی ارائه شده توسط فریمورک را رعایت کند. زیرا بعد از 5 ثانیه، ANR باعث تجربه کاربری بد میشود.
بنابراین، ابتدا باید تمام استانداردهای کدنویسی را برای جلوگیری از ANR رعایت کنیم و سپس میتوانیم از StrictMode به عنوان یک ابزار استفاده کنیم تا مشکلاتی که به طور ناخواسته به جا ماندهاند را بهبود دهیم.
ممنون که تا آخر این پست همراه من بودید ، امیدوارم براتون مفید بوده باشه 🙌🙏✌ (:
بقیه آموزش های mister developer را می توانید در تلگرام و اینستاگرام دنبال کنید!!
کانال تلگرام: mister_developerr
اینستاگرام: mister_developerr
موفق و پیروز باشید
مطلبی دیگر از این انتشارات
تجربه من از برنامه نویسی روز دوم.
مطلبی دیگر از این انتشارات
Developer Experience معیاری که نادیده گرفته شد
مطلبی دیگر از این انتشارات
آموزش Unit Test در Golang