赞
踩
附带Volley Jar包下载地址:https://download.csdn.net/download/weixin_38196407/11153244
一、Volley简介
在开发Android应用的时候不可避免的需要使用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接受网络数据。Android系统中主要提供了两种方式进行HTTP通信,HttpURLConnection和HttpClient(在Android 6.0之后被完全废弃)。
不过HttpURLConnection和HttpClient的用法稍微有些复杂,如果不进行适当封装,很容易写出不少重复代码。AsyncHttpClient网络框架把HTTP所有的通信细节全部封装在内部;Universal-Image-Loader使得在界面上显示网络图片的操作变得极其简单,开发者无需关心如何从网络获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经做好了一切。
Google在2013年推出了一个新的网络通信框架——Volley。Volley把AsyncHttpClient和Universal-Image-Loader的优点集于一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。
在性能上,其设计目标就是非常适合进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如下载文件等,Volley的表现就会非常糟糕。
二、Volley缺陷
前面说了,Volley的缺陷在于:对于大数据量的网络操作的表现会非常糟糕,比如下载上传大文件。那么为什么Volley不适合下载上传大文件,而适合数据量小的频率高的网络请求?
依据Volley的源码,Volley的网络请求线程池默认大小为4,意味着可以并发进行4个请求,大于4个,就会排在队列中。
Request的getBody()方法返回byte[]类型,作为Http.POST和Http.PUT body中的数据。这意味着需要把用http传输的数据一起读取到内存中,因此如果文件过大,内存容易出现oom。
三、Volley使用之GET请求
四、Volley使用之POST请求
POST请求的使用,绝大部分步骤是与GET请求是相同的,唯一的区别在于GET请求将要请求的参数以?+键值对的方式接在连接之后,而POST请求则是将数据放置在主体中。
StringRequest类中,通过重写getParams()方法,将POST的数据以键值对的形式存储到Map实例中,并返回。Volley会通过HttpURLConnection进行处理。
若返回的是JsonObject类型的数据,则采用JsonObjectRequest类,而JsonObjectRequest类的构造函数中有一个JsonObject类型的参数,用于传入需要POST的数据,如果是GET方式,则直接传入null即可。
五、Volley加载网络图片
前面提到过,Volley是将AsyncHttpClient和Universal-Image-Loader的优点集成于一身的一个框架。而Universal-Image-Loader具备非常强大的加载网络图片的功能,而使用Volley同样可以实现基本类似的效果,并且在性能上毫不逊色。
六、加载网络图片第三方库
目前加载网络图片的第三方库有很多,除了这里提到的Volley可以用于加载图片外,还有:
Fresco
Glide
Picasso
nostra13的ImageLoader
其中,个人比较推荐的是Fresco,其可以从网络、本地存储或者本地资源中加载图像,并显示占位图片,直到图片加载完毕。值得一提的是其拥有两级缓存,一个在内存中;另一个在内部存储中。
参考资料:Android网络请求——Volley的使用
Android Volley完全解析(一),初识Volley的基本用法
Android Volley完全解析(二),使用Volley加载网络图片
Volley为什么不适合下载上传大文件?为什么适合数据量小的频率高的请求?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。