تبلیغات

از درج هرگونه تبلیغات و مطالب هرز معذوریم

آموزش :: مدیریت حافظه در اندروید

در برنامه نویسی اندروید مدیریت حافظه یکی از مشکلات اساسی در مسیر توسعه اپ می باشد که آن هم وجود منابع کم گوشی های هوشمند نسبت به کامپیوتر ها می باشد. زبان جاوا جزو زبان های garbage-collecting-language که بصورت اتوماتیک مدیریت حافظه و به عهده میگیرد اما باز هم بنا به دلایل مختلف کمبود حافظه در برنامه هایی که به شکل بهینه نوشته نشده باشند اتفاق می افتد و دلیل آن هم اشتباهات برنامه نویس می باشد.کمبود حافظه یا Memory leak زمانی اتفاق می افتد که شما برای مثال متغیری داخل برنامه دارید ولی هیچ استفاده ای ازش نمیبرید و بخاطر اینکه داخل برنامه در جایی به این متغیر رفرنس داده شده است به همین دلیل امکان پاک کردن از حافظه وجود ندارد. همین متغیر های بلا استفاده باعث مصرف منابع حافظه شده و در نتیجه دیگر جایی برای آبجکت های قابل اجرا باقی نمی ماند و برنامه کرش میکند.

Image


  1. static context : در کل همیشه موقع استفاده از Context مراقب باشید و به این نکته توجه کنید که در جای مناسب از Context مناسب استفاده کنید و تا حد امکان از اپلیکیشن context به جای اکتیویتی context استفاده کنید.
  2. کلاس های داخلی : اگر از کلاس های داخلی استفاده میکنید سعی کنید آنها را به صورت استاتیک تعریف کنید چون کلاس های داخلی غیر استاتیک باعث میشود کلاس خارجی همیشه زنده یا فعال بماند. همچنین اگر داخل کلاس درونی خود از View استفاده میکنید بهتر هست که این View و به متد سازنده کلاس خود اضافه کنید چون با این کار یک weak reference ایجاد میکنید.
  3. static views : در بحث مدیریت حافظه همیشه سعی کنید که طرف static views ها نروید چون این View ها هیچوقت از بین نمیروند و همیشه در دسترس هستند.
  4. غیر فعال کردن listeners ها : در مسیر توسعه یک اپ بدون شک از listener های زیادی داخل اکتیویتی یا فرگمنت ها استفاده میکنیم ولی خیلی وقت ها فراموش میکنیم که باید این listener ها را غیر فعال یا unregister کنیم. این مسئله به سادگی باعث ایجاد کمبود حافظه میشود.برای غیر فعال کردن listener ها بهتر است که این کار و در متد onDestroy() انجام دهیم.
  5. Bitmap : ابجکت های Bitmap بسیار بزرگ هستند دلیل آن هم ساده است برای اینکه معمولا تمام پیکسل های یک عکس و داخل خودشون ذخیره می کنند. در حالت پیشفرض با خود اندروید مدیریت مموری این Bitmap ها را به عهده دارد اما وقتی به صورت دستی از این Bitmap ها استفاده می کنیم باید حتما از متد recycle() هم در اخر استفاده کنیم همچنین سعی کنید همیشه سایز عکس های داخل اپ خودتون و در کمترین میزان ممکن قرار دهید.