1、Volley是一个HTTP库,它能够帮助Android apps更方便的执行网络操作,最重要的是它更快速高效。
2、Volley获取:https://android.googlesource.com/platform/frameworks/volley
3、Volley 有如下的优点:
自动调度网络请求。
高并发网络连接。
通过标准的HTTP的cache coherence(高速缓存一致性)使得磁盘与内存缓存不可见(Transparent)。
支持指定请求的优先级。
支持取消已经发出的请求。你可以取消单个请求,或者指定取消请求队列中的一个区域。
框架容易被定制,例如,定制重试或者回退功能。
强大的指令(Strong ordering)可以使得异步加载网络数据并显示到UI的操作更加简单。
包含了Debugging与tracing工具。
4、Volley不适合用来下载大的数据文件。因为Volley会在解析的过程中保留持有所有的响应数据在内存中。对于下载大量的数据操作,请考虑使用DownloadManager。
Example1:发送简单的网络请求
mText = (TextView)findViewById(R.id.text);
RequestQueue queue = Volley.newRequestQueue(this);
String url = "http://www.baidu.com";
//Request a string response from the provided URL
StringRequest stringRequest = new StringRequest(Request.Method.GET,url,
new Response.Listener(){
@Override
public void onResponse(Object response) {
mText.setText("Response is: "+((String)response).substring(0,500));
}
},new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error) {
mText.setText("it does not work!");
}
});
//Add the request to the RequestQueue
queue.add(stringRequest);
分析:
一、RequestQueue管理用来执行网络操作的工作线程,从Cache中读写数据,并解析Http的响应内容。 Requests 执行raw responses的解析,Volley会把响应的数据分发给主线程。
二、为了发送一个请求,只需要构造一个请求并通过add()方法添加到 RequestQueue中。一旦添加了这个请求,它会通过队列,得到处理,然后得到原始的响应数据并返回。
三、当执行add()方法时,Volley触发执行一个缓存处理线程以及一系列网络处理线程。当添加一个请求到队列中,它将被缓存线程所捕获并触发:如果这个请求可以被缓存处理,那么会在缓存线程中执行响应数据的解析并返回到主线程。如果请求不能被缓存所处理,它会被放到网络队列中。网络线程池中的第一个可用的网络线程会从队列中获取到这个请求并执行HTTP操作,解析工作线程的响应数据,把数据写到缓存中并把解析之后的数据返回到主线程。
四、可在任何线程中添加一个请求,但是响应结果都是返回到主线程的。
下图,演示了一个请求的生命周期:
Example2:cancel a request
1 、定义你的tag并添加到你的请求任务中。
public static final String TAG = "MyTag";
StringRequest stringRequest;
RequestQueue mRequestQueue;
// Set the tag on the request.
stringRequest.setTag(TAG);
// Add the request to the RequestQueue.
mRequestQueue.add(stringRequest);
2、在activity的onStop()方法里面,取消所有的包含这个tag的请求任务。
@Override
protected void onStop(){
super.onStop();
if(mRequestQueue != null){
mRequestQueue.cancelAll(TAG);
}
}
当取消请求时请注意:如果你依赖你的响应handler来标记状态或者触发另外一个进程,你需要对此进行考虑。再说一次,response handler是不会被执行的。