آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ذخیره و نمایش عکس های دانلودی

احسان  6 سال پیش  6 سال پیش
0 0

سلام دوستان

من یه برنامه دارم که توش تصویرهای زیادی وجود داره و باید از سرور دانلود بشه ، من دارم از رتروفیت استفاده می کنم برای دانلود عکس هام و یک سوالی برای پیش اومده.

الان من عکسی رو که دانلود می کنم یه فولدر داخل گوشی درست می کنم و عکس ها رو اونجا قرار می دم و هر موقع لازم شد از روی کارت حافظه می خونم منتها من هر برنامه ای رو دیدم این کار رو نکرده ، مثلا بازار این همه تصویر که نمایش میده رو اصلا روی کارت حافظه قرار نمیده که بعدش بخواد از روی حافظه بخونه (حداقل تا اینجا که من فهمیدم :) ) . ممنون میشم یه راهنمایی به من بدید که اصلا این کار درستی هست که من انجام میدم یا اینکه راه بهتری هم هستش.

ممنون 

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
مرتضی مرادی  6 سال پیش
+1 0

دوست عزیز از کتابخانه Glide برای لود سریع عکس و همچنین کش کردن ( یعنی یکبار دانلود و ذخیره در پوشه روت برنامه و عدم دانلود دوباره در اجراهای بعدی) استفاده می کنند. این عکس ها چون در پوشه روت گوشی ذخیره میشوند دیگر در گالری قابل مشاهده نیستند.

 بعد از اضافه کردن کتابخانه به پروژتون از این کد استفاده کنید :

Glide.with(context)
    .load( "http://futurestud.io/icon.png" )
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .into(imageView);
 Look This Link : https://stackoverflow.com/questions/37964187/preload-multiple-images-with-glide

شیوه ی دیگری که می توانید از آن طریق کارایی را بهبود ببخشید, ذخیره سازی موقت اشیإ سنگین و پر حجم است, به عنوان مثال در صورت دانلود تصاویر برای نمایش در ListView, باید آن ها را در حافظه ی پنهان نگه داشته تا از این طریق از دانلود مجدد آن ها در آینده خودداری کنید .   حافظه ی پنهان LRU (least recently used) حساب استفاده از تمامی اعضای خود را دارد . آیتم نام برده دارای یک ظرفیت معین است و در صورت پر شدن آن ظرفیت, حافظه ی مزبور آیتم هایی که طولانی مدت مورد استفاده قرار نگرفته اند را حذف می کند .

این رفتار در تصویر زیر به نمایش گذاشته شده است :

اندروید, کلاس LruCache را از رابط برنامه سازی کاربردی 12 API به بعد (یا کتابخانه ی پشتیبانی نسخه ی 4) در اختیار برنامه نویس قرار می دهد . کلاس مذکور قابلیت پیاده سازی حافظه ی پنهان Least Recently Used را در اختیار برنامه نویس قرار می دهد . مثال :

 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();    } }

به منظور دستیابی به ظرفیت اولیه حافظه ی پنهان, می توان از MemoryClass بهره گرفت و بدین ترتین تنها از مقدار ناچیزی از کل حافظه ی در دسترس استفاده کرد .  :

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

  توی اون لینک استکی که براتون فرستادم یه نمونه از همین کاربرد وجود داره.

0 0
سلام واقعا از این جواب کامل تون ممنونم یک موردی که هستش اینه که من برای دانلود عکس هام باید به سرور وصل بشم و باید توی هدر Basic Auth قرار بدم تا بتونم عکسرو دانلود کنم با این حساب چی کار باید کرد ؟ من برای اتصال به سرور از رتروفیت استفاده می کنم . ممنون (6 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .