我目前正在使用Picasso在多个回收者视图中的应用程序中下载和缓存图像。到目前为止,毕加索已使用了大约49MB的缓存大小,我担心随着更多图片的出现,这一数字会变得更高。
我正在使用默认Picasso.with(context)
对象。请回答以下问题:
1)有没有一种方法可以限制毕加索的缓存大小。不能将MemoryPolicy和NetworkPolicy设置为NO_CACHE。我需要缓存,但要达到一定级别(最大60MB)
2)在毕加索中是否有一种方法可以像Glide DiskCacheStrategy.RESULT中那样存储已调整大小/裁剪的图像
3)如果选择使用OKHTTP,请指导我学习如何使用它来限制Picasso的缓存大小。(毕加索2.5.2)
4)由于我使用的是毕加索的Gradle依赖项,因此如何添加一个清晰的Cache函数,如下所示:
请尝试此操作,它似乎确实对我有用:
我将其用作Singleton。只需将DISK / CACHE大小参数放在60处即可。
//Singleton Class for Picasso Downloading, Caching and Displaying Images Library
public class PicassoSingleton {
private static Picasso mInstance;
private static long mDiskCacheSize = CommonConsts.DISK_CACHE_SIZE * 1024 * 1024; //Disk Cache
private static int mMemoryCacheSize = CommonConsts.MEMORY_CACHE_SIZE * 1024 * 1024; //Memory Cache
private static OkHttpClient mOkHttpClient; //OK Http Client for downloading
private static Cache diskCache;
private static LruCache lruCache;
public static Picasso getSharedInstance(Context context) {
if (mInstance == null && context != null) {
//Create disk cache folder if does not exist
File cache = new File(context.getApplicationContext().getCacheDir(), "picasso_cache");
if (!cache.exists())
cache.mkdirs();
diskCache = new Cache(cache, mDiskCacheSize);
lruCache = new LruCache(mMemoryCacheSize);
//Create OK Http Client with retry enabled, timeout and disk cache
mOkHttpClient = new OkHttpClient();
mOkHttpClient.setConnectTimeout(CommonConsts.SECONDS_TO_OK_HTTP_TIME_OUT, TimeUnit.SECONDS);
mOkHttpClient.setRetryOnConnectionFailure(true);
mOkHttpClient.setCache(diskCache);
//For better performence in Memory use set memoryCache(Cache.NONE) in this builder (If needed)
mInstance = new Picasso.Builder(context).memoryCache(lruCache).
downloader(new OkHttpDownloader(mOkHttpClient)).
indicatorsEnabled(CommonConsts.SHOW_PICASSO_INDICATORS).build();
}
}
return mInstance;
}
public static void updatePicassoInstance() {
mInstance = null;
}
public static void clearCache() {
if(lruCache != null) {
lruCache.clear();
}
try {
if(diskCache != null) {
diskCache.evictAll();
}
} catch (IOException e) {
e.printStackTrace();
}
lruCache = null;
diskCache = null;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句