Volley 核心源码解析(四)

[size=large][color=orange]Volley 的缓存[/color][/size]


[color=green][b]1.磁盘缓存[/b][/color]
在Volley类 调用 newRequestQueue方法的时候 ,创建了一个file

File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);

明显 这是做了[color=red][b]磁盘缓存[/b][/color]

RequestQueue queue;
if (maxDiskCacheBytes <= -1)
{
// No maximum size specified
queue = new RequestQueue(new DiskBasedCache(cacheDir), network);
}
else
{
// Disk cache size specified
queue = new RequestQueue(new DiskBasedCache(cacheDir, maxDiskCacheBytes), network);
}

queue.start();

这里的意思是:没有设置缓存大小的时候,使用默认的缓存大小,反之使用自定义的大小

看看 DiskBasedCache类中的静态变量:

/** Default maximum disk usage in bytes. */
private static final int DEFAULT_DISK_USAGE_BYTES = 5 * 1024 * 1024;

构造方法;
public DiskBasedCache(File rootDirectory) {
this(rootDirectory, DEFAULT_DISK_USAGE_BYTES);
}

这就对磁盘缓存做了一个5M大小的初始化。
具体的DiskBasedCache怎么缓存的 这里就不深究了,有兴趣的可以自己去了解,无非就是把内容存到SD卡中。

[color=green][b]2.内存缓存 MemoryChache[/b][/color]

在Volley 中 我知道的使用内存缓存的地方 是在图片加载的时候,Volley 中定义一个 叫做
ImageCache 的接口,

public interface ImageCache {
public Bitmap getBitmap(String url);
public void putBitmap(String url, Bitmap bitmap);
}

这个接口中定义了 两个方法,取和存。

在我们自己实现ImageCache的时候 可以用到 LruCache,也可以用 DiskChche
但是加载图片 优先用LruCache更快 其次才是 DiskChche;

这里给出一个简单的 实现:


public class BitmapLruCache implements ImageCache {

private LruCache<String, Bitmap> cache;

public BitmapLruCache() {
cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}

@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}

@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
}

现在有很多优秀的图片加载库 如 Facebook 的Fresco,ImageLoader 等.

当然 Volley的也很好用。

[color=green][b]3.网络请求的缓存[/b][/color]

在前面章节中已经结束到了,这里就不再细谈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值