2
我正在使用毕加索。使用磁盘上的毕加索加载图像
我想缓存磁盘上的图像,我正在使用okhttpdownloader。
这是我正在尝试做的操作我希望Image可以缓存在外部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