Volley 核心源码解析(四)

Volley的缓存

1.磁盘缓存

在Volley类调用newRequestQueue方法的时候,创建了一个file

FilecacheDir=newFile(context.getCacheDir(),DEFAULT_CACHE_DIR);

明显这是做了磁盘缓存

RequestQueuequeue;

if(maxDiskCacheBytes<=-1)

{

//Nomaximumsizespecified

queue=newRequestQueue(newDiskBasedCache(cacheDir),network);

}

else

{

//Diskcachesizespecified

queue=newRequestQueue(newDiskBasedCache(cacheDir,maxDiskCacheBytes),network);

}

queue.start();

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

看看DiskBasedCache类中的静态变量:

/**Defaultmaximumdiskusageinbytes.*/

privatestaticfinalintDEFAULT_DISK_USAGE_BYTES=5*1024*1024;

构造方法;

publicDiskBasedCache(FilerootDirectory){

this(rootDirectory,DEFAULT_DISK_USAGE_BYTES);

}

这就对磁盘缓存做了一个5M大小的初始化。

具体的DiskBasedCache怎么缓存的这里就不深究了,有兴趣的可以自己去了解,无非就是把内容存到SD卡中。

2.内存缓存MemoryChache

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

ImageCache的接口,

publicinterfaceImageCache{

publicBitmapgetBitmap(Stringurl);

publicvoidputBitmap(Stringurl,Bitmapbitmap);

}

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

在我们自己实现ImageCache的时候可以用到LruCache,也可以用DiskChche

但是加载图片优先用LruCache更快其次才是DiskChche;

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

publicclassBitmapLruCacheimplementsImageCache{

privateLruCache<String,Bitmap>cache;

publicBitmapLruCache(){

cache=newLruCache<String,Bitmap>(8*1024*1024){

@Override

protectedintsizeOf(Stringkey,Bitmapbitmap){

returnbitmap.getRowBytes()*bitmap.getHeight();

}

};

}

@Override

publicBitmapgetBitmap(Stringurl){

returncache.get(url);

}

@Override

publicvoidputBitmap(Stringurl,Bitmapbitmap){

cache.put(url,bitmap);

}

}

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

当然Volley的也很好用。

3.网络请求的缓存

在前面章节中已经结束到了,这里就不再细谈。

相关推荐