Android Volley解析(1)
来源:互联网 发布:天天向上 欧弟 知乎 编辑:程序博客网 时间:2024/05/16 11:23
1. Volley简介
Volley是Google I/O 2013推出的网络通信库,将HTTP的通信操作再进行简单化。可以从GitHub
上获取Volley 。
Volley提供以下特性:
· 自动调度网络请求。
· 多个并发网络连接。
· 具有标准HTTP 缓存一致性的磁盘和内存缓存 。
· 支持请求优先级。
· 支持取消请求。您可以取消单个请求,也可以设置要取消的请求块或范围。
· 支持客制化。例如: 重试策略
· 请求排序,可以轻松地从网络异步获取数据来正确填充您的UI。
· 完善的调试和跟踪工具。
Volley擅长用于填充UI的RPC(Remote Procedure Call Protocol)类型操作,例如将搜索结果页作为结构化数据。它可以轻松地与任何协议集成起来,支持原始字符串,图像和JSON。通过为您需要的功能提供内置支持,Volley可以免于编写样板代码,并允许您专注于您应用程序特有的逻辑。
2. 适用场景
适用于数据量不大,但网络通信频繁的。
Volley不适合大型下载或流式传输操作,因为Volley在解析过程中将所有响应都存储在内存中。对于大型下载操作,请考虑使用其他替代方法DownloadManager。
3.下载
核心的Volley库是在GitHub上开发的,
为您的项目添加Volley的最简单方法是将以下依赖项添加到应用程序的build.gradle文件中:
dependencies { ... compile 'com.android.volley:volley:1.0.0'}
您还可以通过git命令下载源码:
git clone https://github.com/google/volley
4.发送一个简单请求
final TextView mTextView = (TextView) findViewById(R.id.text);...//首先获取一个RequestQueue对象//注意这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,//然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常适合//高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是//非常浪费资源的。RequestQueue queue = Volley.newRequestQueue(this);String url ="http://www.baidu.com";// 接下来为了要发出一条HTTP请求,我们还需要创建一个StringRequest对象。//可以看到,这里new出了一个StringRequest对象,StringRequest的构造//函数需要传入四个个参数,第一个参数就是HTTP的请求类型,第二个参数就是//目标服务器的URL地址,第三个参数是服务器响应成功的回调,第四个参数是//服务器响应失败的回调。其中,目标服务器地址我们填写的是百度的首页,//然后在响应成功的回调里显示服务器返回的内容,在响应失败的回调里打印出失败的详细信息。StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { // Display the first 500 characters of the response string. mTextView.setText("Response is: "+ response.substring(0,500)); }}, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mTextView.setText("That didn't work!"); }});// 将这个StringRequest对象添加到RequestQueue里面就可以了queue.add(stringRequest);
Volley总是在主线程返回服务器响应解析结果(网络请求和响应解析是在工作线程)。在主线程运行可以方便地使用接收到的数据填充UI控件,因为你可以直接在回调中修改UI。
源码中请求流程
如上所示,要发送请求,您只需构建一个请求,并调用RequetQuene的add()方法将其添加到请求队列。一旦添加到队列中,它将排队等待,获取服务,解析网络响应并返回结果。
Volley运行一个缓存处理线程(CacheDispatcher)和一个网络调度线程池(NetworkDispatcher)。当调用add()向队列添加请求时,它由缓存线程(CacheDispatcher)获取处理:如果请求在缓存中命中,缓存线程将从缓存中解析响应,并将解析的响应在主线程上传递。如果请求无法命中缓存,则将其放置在网络请求队列上。第一个可用的网络线程处理请求,执行HTTP请求服务,解析网络响应,并将响应写入缓存,然后将解析的响应发回主线程进行传递。
注意,诸如I / O和解析/解码等耗时操作在工作线程上完成。您可以从任何线程添加请求,但响应始终在主线程上传递。
5.取消请求
要取消请求,调用Request对象的cancel()方法。一旦取消,Volley确保您的响应不会被处理。意味着您可以在Activity的onStop()方法中取消所有待处理的请求, 不必对您的响应处理进行保护类检查如:getActivity() == null等;
要使用此特性,您通常必须跟踪标记所有正在运行的请求,以便能够在适当的时间取消它们。有一个更简单的方法:您可以将标记对象与每个请求相关联。然后,您可以使用此标记来制定过滤要取消的请求。例如,您可
以用Activity标记所有的相关请求,并在Activity的onStop()中调用requestQueue.cancelAll(this)取消这些请求。
1.这是一个使用字符串标记的示例:
public static final String TAG = "MyTag";StringRequest stringRequest; // Assume this exists.RequestQueue mRequestQueue; // Assume this exists.// Set the tag on the request.stringRequest.setTag(TAG);// Add the request to the RequestQueue.mRequestQueue.add(stringRequest);
2.在Activity的onStop()方法中,取消所有具有此标记的请求:
@Overrideprotected void onStop () { super.onStop(); if (mRequestQueue != null) { mRequestQueue.cancelAll(this); }}
- Android Volley解析(1)
- 解析Android之Volley框架(1)
- Android Volley完全解析1
- Volley源码解析 --- Volley组成(1)
- Android Volley完全解析1:初识Volley的基本用法
- Android Volley完全解析(一),Volley的基本用法
- Android Volley详细解析(一):Volley基本用法
- android Volley完全解析(二)使用Volley加载图片
- Android volly解析(一) 初始Volley
- Android Volley完全解析
- Android Volley完全解析
- Android Volley完全解析
- Android Volley 源码解析
- Android:Volley源码解析
- Android Volley完全解析
- Android Volley 完全解析
- Android Volley完全解析
- Android Volley完全解析
- HP-Socket v4.3.1,高性能 TCP & HTTP 通信框架
- 解决图片加载错位的类
- 39-二叉树的深度
- JS基础知识点梳理
- java基础(一):进制,运算符,流程控制,函数,数组
- Android Volley解析(1)
- 欢迎使用CSDN-markdown编辑器
- 王爽汇编第三版实验10.2 浅析
- UNIX环境高级编程(1)
- git 汉化
- ZOJ 2048 POJ 1751 Highways
- Java中的修饰符总结
- hashmap遍历与删除代码样例
- Java String对象的经典问题(new String())