میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

Cache در اندروید

همان طور که می دانید فرایند ساخت آبجکت بسیار سنگین و هزینه بر است. Cache این امکان را فراهم می کند تا آبجکت هایی که قبلا در حافظه موجود هستند را بازیافت نموده (مجددا مورد استفاده قرار داد) و بدین وسیله از تخصیص یافتن مجدد منابع به ساخت آبجکت (جدید) خودداری گردد. به عبارتی، زمانی که شما آبجکتی را در حافظه بارگذاری می کنید، می توانید این حافظه را به عنوان cache و حافظه ی موقت برای میزبانی آبجکت ساخته شده در نظر بگیرید. به عنوان مثال زمانی را در نظر بگیرید که تعدادی فایل تصویری را از اینترنت بارگیری می کنید. در این لحظه، جهت نمایش فایل های ذکر شده در یک لیست، می بایست آن ها را به طور موقت در حافظه نگه دارید. امر مانع از این می شود که عکس ها بارها از اینترنت دانلود شوند. شما به ناگذیر بایستی برخی از آبجکت های مستقر در حافظه را بازیافت نمایید چرا که در غیر این صورت با کمبود حافظه مواجه خواهید شد. یک روش پیشنهادی این است که آبجکت هایی که طولانی مدت در اپلیکیشن مورد استفاده قرار نگرفته اند را بازیافت نمایید.

محیط (platform) اندروید از  API 12 (ورژن ۱۲ کتابخانه های اندروید) کلاسی به نام LruCache را ارائه می نماید (لازم به ذکر است که این قابلیت در کتابخانه های پشتیبانی از ورژن های قبلی اندورید support-v4 library نیز قابل دسترسی می باشد.) کلاس مزبور امکان پیاده سازی یک cache جهت نگهداری آبجکت هایی که مدت طولانی مورد استفاده قرار نگرفته اند را فراهم می سازد. به عبارت دیگر این کلاس یک LRU cache پیاده سازی می کند. در این cacheتمامی اعضایی که مدت ها از آخرین بار استفاده از آن ها می گذرد، قرار می گیرند ( آبجکت هایی که کمترین استفاده ی اخیر را داشته اند در این حافظه ی موقت جای می گیرند.) این cache ظرفیت مشخصی دارد و هنگامی که این ظرفیت پر می شود، تمامی آیتم هایی که طولانی مدت مورد استفاده قرار نگرفته اند بر حسب نیاز از این cache حذف می شوند. این قابلیت تصویر زیر نمایش داده شده است.

Cache در اندروید
Cache در اندروید

 

 

مثال زیر یک نمونه از پیاده سازی کلاس LruCache را برای ذخیره ی موقتی فایل های تصویری فراهم می سازد

 

public class ImageCache extends LruCache<String, Bitmap> {
public ImageCache( int maxSize ) {
super( maxSize );
}
@Override
protected int sizeOf( String key, Bitmap value ) {
return value.getByteCount();
}
@Override
protected void entryRemoved( boolean evicted, String key, Bitmap oldValue, Bitmap newValue ) {
oldValue.recycle();
}
}

همان طور که در نمونه کد زیر مشاهده می کنید، استفاده از آن بسیار ساده می باشد.

LruCache<String, Bitmap> bitmapCache = new LruCache<String, Bitmap>();

جهت اطلاع از ظرفیت حقیقی cache ، کافی است اندازه و ظرفیت کل حافظه ی قابل استفاده در دستگاه میزبان را بررسی نمایید. برای این منظور می توانید از کلاس MemoryClass استفاده نمایید. کد زیر استفاده از آن را به نمایش می گذارد

int memClass = ( ( ActivityManager) activity.getSystemService( Context.ACTIVITY_SERVICE )
).getMemoryClass();
int cacheSize = 1024 * 1024 * memClass / 8;
LruCache cache = new LruCache<String, Bitmap>( cacheSize );

 

 


پاک سازی cache

از API 14 این امکان برای شما وجود دارد که متد () onTrimMemory را در کامپوننت های نرم افزاری اندورید بازنویسی (override) نمایید. این متد را اندروید فراخوانی نموده و به شما این اجازه را می دهد تا زمانی که سیستم منابعی را جهت پردازش های پیش زمینه ای (foreground process) لازم داشت، محتوای حافظه را پاک سازی و آزاد نمایید.

 


امیدواریم آموزش Cache در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟