一、Volley基本概念
Volley的Github地址:https://github.com/google/volley
Volley的基本用法:下载Volley库且放在libs目录下并add到工程中。(官网使用说明<需科学上网>)
在2013年Google I/O大会上推出了一个新的网络通信框架Volley。Volley既可以访问网络取得数据,也可以加载图片,并且在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕,因为Volley处理http返回的默认实现是BasicNetwork,它会把返回的流全部导入内存中,下载大文件会发生内存溢出。(与之相对,OkHttp则更适合数据量大的重量级网络请求)
Volley框架默认在Android2.3及以上版本使用HttpURLConnection来完成网络操作,在Android2.3以下版本使用HttpClient来完成网络操作。
Volley请求网络都是基于请求队列的,只需要把请求放在请求队列(RequestQueue)里,请求队列就会依次进行请求。
二、Volley进行HTTP通信的步骤
1、创建RequestQueue队列
2、创建Request对象,并加入队列中
3、处理回调事件
三、Volley框架中的请求类型
四、Volley请求流程图
五、如何使用Volley进行异步加载图片?
1、使用Volley框架的ImageLoader类来异步加载图片
ImageLoader类的内部是使用ImageRequest类来实现的。在加载图片时,由于该类不仅对图片进行缓存,而且还可以过滤掉重复的链接,避免重复发送请求,因此它比ImageRequest更加高效。
使用ImageLoader类加载网络图片的具体步骤如下:
1、分别创建一个RequestQueue、ImageCache、ImageLoader对象。
2、通过ImageLoader类获取一个ImageListener的对象。
3、调用ImageLoader类的get()方法加载网络上的图片。
2、使用Volley框架的NetworkImageView来异步加载图片
NetworkImageView继承自InageView,是Volley框架中提供的一个全新且简单加载图片的控件,该控件可直接用于显示网络上的图片。
六、Volley的执行过程
默认情况下,Volley中开启四个网络调度线程和一个缓存调度线程,首先请求会加入缓存队列,缓存调度线程从缓存队列中取出线程,如果找到该请求的缓存就直接读取该缓存并解析,然后回调给主线程,如果没有找到缓存的响应,则将这个请求加入网络队列,然后网络调度线程会轮询取出网络队列中的请求,发起HTTP请求,解析响应并将响应存入缓存,回调给主线程。
七、为什么Volley不适合下载上传大文件?为什么适合数据量小的频率高的请求?
1、volley基于请求队列,Volley的网络请求线程池默认大小为4。意味着可以并发进行4个请求,大于4个,会排在队列中。并发量小所以适合数据量小频率高的请求。
2、因为Volley下载文件会将流存入内存中(是一个小于4k的缓存池),大文件会导致内存溢出,所以不能下载大文件,不能上传大文件的原因和1中差不多,设想你上传了四个大文件,同时占用了volley的四个线程,导致其他网络请求都阻塞在队列中,造成反应慢的现象。
八、StringRequest方式的GET用法
九、StringRequest方式的POST用法
十、VolleyDemo
项目简介:采用Volley框架,通过访问聚合API查询手机归属地。
项目地址:https://github.com/ambition-hb/VolleyDemo
部分代码如下:





































苏公安网备 32011402010933号