Я использую 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);
это работает, но до сих пор я вижу там увеличение используется память кучи, когда я прокрутите вверх и вниз. – apk
Я не эксперт в отношении потребления кучи пространства, однако временное увеличение может быть нормальным поведением из-за загрузки растровых изображений с диска на память. Насколько я понимаю, большая проблема заключается в том, что ** только когда и если ** размер кучи не стабилен в среднем времени, возможно, у вас есть утечка памяти, возможно, сбор мусора неэффективен для освобождения памяти. – GPack