volley
RequestQueue
CacheDispatcher,一个线程
NetWorkDispatcher,有4个线程
有stop(),finish()方法关闭
支持StringRequest,JsonRequest,ImageRequest,ImageLoader,ImageLoaderListener
BlockingQueue == 0时会一直阻塞
分层解析
基础层
异常
log
重试机制
缓存
网络层
控制层
dispatcher
应用层
读懂Volley,必须要理解的几个问题
https://blog.csdn.net/fenggering/article/details/88563418
“史诗级”的Volley源码您真的彻底弄懂了?
https://blog.csdn.net/zengqiang11111/article/details/75275871
#### Volley之ByteArrayPool——LruCache实现
2个byte数组,一个LinkedList,一个ArrayList
```
/**
* byte[]待删集合,记录了byte[]的使用顺序。当缓存的byte数目超过指定的最大值时,会回收该list集合中的第一个元素。
* 每一次从变量mBuffersBySize中获取到合适的byte[]时,会将返回值从该集合中删除,因为这个byte[]是最近使用的。
* 每一次回收该集合中第0个元素,保证了回收的byte[]是使用时间最久远的。
*/
private List<byte[]> mBuffersByLastUse = new LinkedList<>();
/**
* byte[]的真正缓存list集合。每一次获取时都是从该集合中获取或者新生成
*/
private List<byte[]> mBuffersBySize = new ArrayList<>(64);
```
## 源码解析
http://www.codekk.com/open-source-project-analysis/detail/Android/grumoon/Volley%20%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90