问题
I'm loading images from URLs (http://) with Picasso.
Sometimes when i try to "preload" an image using Picasso's fetch()
method, the image doesn't get cached. I guess it's because it's size is too big.
Read the answer for this question, but setCache()
doesn't seem to be recognized for me, i don't even find it in the Picasso documentation.
Is there any way to change the cache size Picasso uses for bitmaps?
回答1:
You can do:
int maxSize = MAX_CACHE_SIZE;
Picasso picasso = new Picasso.Builder(context)
.memoryCache(new LruCache(maxSize))
.build();
Picasso
uses a Cache interface type to manage the cache. They provide the default implementation, LruCache, which has a constructor that accepts the max size in bytes as an argument.
Seems like the other answer uses the wrong function. It should be memoryCache
, not setCache
.
回答2:
This example use OkHttp as http client for Picasso and setup max Disk cache size and also memory cache.
// Size in bytes (10 MB)
private static final long PICASSO_DISK_CACHE_SIZE = 1024 * 1024 * 10;
// Use OkHttp as downloader
Downloader downloader = new OkHttpDownloader(getApplicationContext(),
PICASSO_DISK_CACHE_SIZE);
// Create memory cache
Cache memoryCache = new LruCache(maxSize);
mPicasso = new Picasso.Builder(getApplicationContext())
.downloader(downloader).memoryCache(memoryCache).build();
来源:https://stackoverflow.com/questions/30705408/is-it-possible-to-change-the-size-of-the-cache-picasso-uses-for-images