Volley
Volley的中文翻译为“齐射、并发”,是在2013年的Google大会上发布的一款Android平台网络通信库,具有网络请求的处理、
小图片的异步加载和缓存等功能,能够帮助 Android APP 更方便地执行网络操作,而且更快速高效。
Volley特别适合数据量不大但是通信频繁的场景
Volley 有如下的优点:
自动调度网络请求;
高并发网络连接;
通过标准的 HTTP cache coherence(高速缓存一致性)缓存磁盘和内存透明的响应;
支持指定请求的优先级;
网络请求cancel机制。我们可以取消单个请求,或者指定取消请求队列中的一个区域;
框架容易被定制,例如,定制重试或者回退功能;
包含了调试与追踪工具;
Volley 不适合用来下载大的数据文件。因为 Volley 会保持在解析的过程中所有的响应。对于下载大量的数据操作,请考虑使用 DownloadManager
实现思路:
将请求添加到请求对列(mian Thread)
|
|
添加到缓存详情,进行缓存内容查找 (缓存线程)
| |
是(有内容) 否(没有内容)
| |
| |
读取缓存的内容(缓存线程) |
| 开启网络请求(网络请求线程)
| |
数据返回给主线的回调方法(主线程) |
| |
| 将数据添加到缓存中(网络线程)
| |
--------------------------|
RequestQueue 请求对列
1. 获取系统默认的请求对列
Volley.newRequestQueue(this)
默认缓存路径:File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR); data/data/包名/cache/volley
当当前Api >= 9 网络加载使用 HttpUrlConnection
<9 AndroidHttpClient
2.自定义请求队列 修改缓存的路径
/**
* 参数1:File 缓存所在的文件夹 指定缓存路径
* 参数2: 指定缓存容量的大小
*/
File file = new File(Environment.getExternalStorageDirectory(),"volleyxx");
if (!file.exists()){
file.mkdirs(); //创建缓存的文件夹 sdcard/volleyxx
}
Cache cache = new DiskBasedCache(file,100*1024*1024);
/**
* HurlStack HttpUrlConnection
* HttpClientStack HttpClient
*/
Network network = new BasicNetwork(new HurlStack());
/**
* 1.缓存部分
* 2.网络部分
*/
requestQueue = new RequestQueue(cache,network);
//最后一定要调用start
requestQueue.start();
Request 请求
Request
1.使用Volley自带的请求
StringRequest 返回的结果是 String 重点
JsonArrayRequest 返回的结果 JSONArray
JSONObjectRequest 返回的就是 JSONObject 返回的结果必须是JSONArray或者JSONObject
2.自定义请求返回对应的实体类类型
希望返回的数据 直接是GSON插件解析的实体类对象!
RequestQueue.add(Request) 开启一个请求