2015-05-04 1 views
2

Я использую Picasso.Загрузка изображения с использованием пикассо на диске

Я хочу, чтобы кешировать изображения на диске, и я использую для этого okhttpdownloader.

Вот что я пытаюсь сделать. Я хочу, чтобы изображение было кэшировано на внешней SD-карте или в памяти телефона, но не нужно кэшировать изображения в памяти кучи из-за ограничений памяти. Поэтому, если изображение загружается в первый раз, оно должно быть кэшировано на диске, и когда следующий запрос времени выполняется для того же url, он сначала должен смотреть в диск, если он кэширован или нет.

Я не могу этого добиться, это мой код.

public class PicassoCache { 

/** 
* Static Picasso Instance 
*/ 
private static Picasso picassoInstance = null; 
private File cacheDir; 

/** 
* PicassoCache Constructor 
* 
* @param context application Context 
*/ 
private PicassoCache (Context context) { 
    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
     cacheDir = context.getExternalCacheDir(); 
    else 
     cacheDir = context.getCacheDir(); 
    Downloader downloader = new OkHttpDownloader(cacheDir, Integer.MAX_VALUE); 
    Picasso.Builder builder = new Picasso.Builder(context); 
    builder.downloader(downloader); 

    picassoInstance = builder.build(); 
} 

/** 
* Get Singleton Picasso Instance 
* 
* @param context application Context 
* @return Picasso instance 
*/ 
public static Picasso getPicassoInstance (Context context) { 

    if (picassoInstance == null) { 

     new PicassoCache(context); 
     return picassoInstance; 
    } 

    return picassoInstance; 
} 

} 

и внутри адаптера я следующий код

PicassoCache.getPicassoInstance(context) 
       .load(item.imageUrl) 
       .memoryPolicy(MemoryPolicy.NO_CACHE) 
       .networkPolicy(NetworkPolicy.NO_CACHE) 
       .into(holder.itemImage); 

ответ

1

Попробуйте удалить .networkPolicy(NetworkPolicy.NO_CACHE) и добавление NO_STORE к memoryPolicy .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)

+0

это работает, но до сих пор я вижу там увеличение используется память кучи, когда я прокрутите вверх и вниз. – apk

+0

Я не эксперт в отношении потребления кучи пространства, однако временное увеличение может быть нормальным поведением из-за загрузки растровых изображений с диска на память. Насколько я понимаю, большая проблема заключается в том, что ** только когда и если ** размер кучи не стабилен в среднем времени, возможно, у вас есть утечка памяти, возможно, сбор мусора неэффективен для освобождения памяти. – GPack