基本操作
1.创建一个请求队列
RequestQueue mQueue = Volley.newRequestQueue(context);
2.创建具体的请求对象
StringRequest stringRequest = new StringRequest("http://www.baidu.com",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
3.将请求添加到请求队列
mQueue.add(stringRequest);
Volley工作原理图
流程总结:
创建请求队列的时候,启动了缓存调度线程和网络调度线程
添加请求的时候,首先判断当前请求是否应该缓存,如果不应该缓存则直接添加到网络请求队列,应该缓存的话则添加到缓存队列,默认情况下,每条请求都是可以缓存的,所以每条请求默认都会添加到缓存队列。
缓存调度线程启动后,会尝试从缓存中获取数据,如果我为空则加入到网络请求队列,如果不为空再判断是不是过期了,过期了同样添加到网络请求队列。
网络调度线程启动会,会调用BasicNetwork的performRequest发送网络请求,在这个方法里面调用之前创建的HttpStack的performRequest执行网络请求,最后会将服务器返回的结果封装成一个NetworkResponse对象返回
NetworkResponse networkResponse = mNetwork.performRequest(request);
在网络请求调度器中接收到这个结果后,会调用
Response<?> response = request.parseNetworkResponse(networkResponse);
同时写入缓存
if (request.shouldCache() && response.cacheEntry != null) {
mCache.put(request.getCacheKey(), response.cacheEntry);
request.addMarker("network-cache-written");
}
最后调用下面的代码将解析的数据进行回调。
mDelivery.postResponse(request, response);