Picasso为追求小而美,有功能取舍,比如,它无法支持下载动态图片。
如果你有这个需求,可以考虑使用Google的Glide或Facebook的Fresco。它们各有特点,Glide比较小巧,Fresco性能好。
上面的库都有缓存机制,如果自己实现的话,可以使用许多缓存机制使用一种叫作LRU(least recently used,最近最少使用)的存储策略。基于该种策略,当存储空间用尽时,缓存会自动清除最近最少使用的对象。
初始化LruCache来缓存Bitmap
LruCache<String, Bitmap> mLruCache;
//获取手机最大内存,单位kb
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
//一般都将1/8设为LruCache的最大缓存
int cacheSize = maxMemory / 8;
mLruCache = new LruCache<String, Bitmap>(maxMemory / 8) {
/**
* 这个方法从源码中看出来是设置已用缓存的计算方式的
* 默认返回的值是 1,也就是每缓存一张图片就将已用缓存大小加 1
* 缓存图片看的是占用的内存的大小,每张图片的占用内存也是不一样的
* 因此要重写这个方法,手动将这里改为本次缓存的图片的大小
*/
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount() / 1024;
}
};
使用
//加入缓存
mLruCache.put("key", bitmap);
//从缓存中读取
Bitmap bitmap = mLruCache.get("key");