نشت حافظه یا همان (Memory leaks) در برنامههای اندروید زمانی رخ میدهد که برنامه به اشیائی که دیگر نیازی به آنها نیست، ارجاع میدهد و باعث میشود جمعآوری زباله (garbage collector) نتواند حافظه آنها را بازیابی کند. با گذشت زمان، این نشتها میتوانند منجر به افزایش استفاده از حافظه و در نتیجه کاهش عملکرد برنامه یا حتی خرابی آن شوند.
نکته : در اینجا منظور از "ارجاع" همان "reference" است که به ارتباط یا اشاره به یک شیء در حافظه اشاره دارد. وقتی میگوییم "ارجاع به یک شیء" یعنی یک متغیر یا یک مکان در برنامه به آن شیء خاص اشاره میکند و میتواند از آن استفاده کند.
جمعآوری زباله یا garbage collector چیست؟
جمعآوری زباله (Garbage Collector) بخشی از سیستم مدیریت حافظه در محیطهای برنامهنویسی است که به طور خودکار اشیاء و دادههای غیرقابل استفاده را از حافظه پاک میکند. وظیفه اصلی جمعآوری زباله این است که حافظهای را که دیگر توسط برنامه استفاده نمیشود، شناسایی و آزاد کند تا بتوان از این حافظه برای نیازهای جدید برنامه استفاده کرد.
در برنامههای اندروید و به طور کلی در زبانهای برنامهنویسی مدرن مانند جاوا، جمعآوری زباله به توسعهدهندگان کمک میکند تا نیازی به مدیریت دستی حافظه نداشته باشند و بدین ترتیب از مشکلات مرتبط با نشت حافظه و خرابی برنامهها جلوگیری شود.
1. درک نشت حافظه:
2. مدیریت چرخه حیات Activity و Fragment:
Activityها و Fragment ها دارای چرخه حیات هستند و مدیریت اشیاء در این چرخهها ضروری است. به عنوان مثال، منابعی مانند اتصالات شبکه یا اتصالات به پایگاه داده باید در متد onDestroy آزاد شوند تا از نگهداشتن ارجاعات پس از پایان چرخه حیات کامپوننت جلوگیری شود.
3. با Context محتاط باشید:
4. اجتناب از ارجاعات استاتیک:
5. استفاده از WeakReferences:
6. آزادسازی منابع:
7. اجتناب از حافظهپنهانی بیش از اندازه:
8. مدیریت درست تغییرات پیکربندی:
نکته : تغییرات پیکربندی یا (Handle Config Changes) به تغییراتی اشاره دارد که در ویژگیهای یک برنامه رخ میدهد که میتواند بر اساس شرایط مختلف محیطی تغییر کند. به عنوان مثال، زمانی که یک کاربر صفحه نمایش دستگاه خود را چرخانده و از حالت عمودی به افقی یا برعکس تغییر میدهد، تغییرات پیکربندی رخ میدهد.
در برنامهنویسی اندروید، وقتی یک تغییر پیکربندی اتفاق میافتد، ممکن است Activity یا Fragment کنونی مجدداً ایجاد شود و مراحل مختلف زندگی آنها مجدداً طی شود. این تغییرات میتوانند به چالش کشیدن مدیریت اطلاعات مربوط به وضعیت فعلی برنامه منجر شوند، به ویژه اگر ارتباطی با عملکرد فعلی کاربر داشته باشند.
بنابراین، هنگامی که میگوییم "مدیریت تغییرات پیکربندی"، منظورمان این است که باید به طور صحیح و از روشهای مختلف، از جمله استفاده از ViewModels، اطلاعات مربوط به وضعیت و ارتباطات برنامه را در طول تغییرات پیکربندی حفظ کنیم تا از مشکلاتی مانند نشت حافظه جلوگیری شود.
9. بهروزرسانی Dependencies:
10. استفاده از کتابخانههای تشخیص نشت حافظه:
11. با سینگلتونها محتاط باشید:
12. اجتناب از ایجاد اشیاء غیرضروری:
13. استفاده هوشمندانه از Application Class:
در این پست، به راهکارهای متعددی که میتوانند به جلوگیری از نشت حافظه کمک کنند، پرداختیم.
ممنون که تا آخر این پست همراه من بودید ، امیدوارم براتون مفید بوده باشه 🙌🙏✌ (:
بقیه آموزش های من با نام (mister developer) را می توانید در تلگرام و اینستاگرام دنبال کنید!!
کانال تلگرام: mister_developerr
اینستاگرام: mister_developerr
موفق و پیروز باشید