google开源项目volley 简要分析
一、volley是一个网络请求框架。
二、快速建立一个网络请求:
RequestQueue queue = Volley.newRequestQueue(this);//1.建立请求队列
String url ="http://www.google.com";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, //2.建立网络请求
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//在此对正确响应进行处理
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//在此进行错误响应处理
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);//3.将请求加入到队列中
三、网络请求框架原理
请看图:
有三个重要组成部分:
1.请求队列
2.缓存分发器
3.网络分发器
其中,请求队列中包含两个BlockingQueue 一个是给缓存分发器的,另一个是给网络分发器。这两个分发器都是继承线程的类。
默认情况下,请求队列中只有一个缓存分发器,4个网络分发器,他们通过从各自阻塞队列中拿到请求然后开始进行网络处理或请求。
正常情况下,请求先进入缓分发器,然后如果没有命中,会进入一个网络分发器进行处理。
网络分发器会调用网络接口进行处理,默认网络接口是HurlStack(使用的是HttpURLConnection).用户也可以自定义使用别的网络请求框架(比如OkHttp)
当网络请求结束后,会将响应结果封装后,交给ResponseDelivery 实际是ExecutorDelivery进行处理,它只是将响应结果通过主线程的handler发送到主线程的队列中。
随后的响应回调会进行处理,即上面所说的onResponse或onErrorResponse。
*重试机制
重试机制是volley自带的一种机制,它会根据第一次网络请求的返回结果判断是否隔段时间重试
重试发生在Network接口里面,所以说StringRequest其实并不知道发生了重试(当然mark标志会体现出来),它根据RetryPolicy来实现重试机制