参考:Volley源码解析
volley为齐射的意思,因此它主要用于操作数据量少但访问频繁的时候。
newRequestQueue(Context context, HttpStack stack, int maxDiskCacheBytes)第三个参数规定了磁盘缓存的最大容量(单位为byte),如果该值<=-1,那么就使用默认的值(5M)。主要代码如下:
public static RequestQueue newRequestQueue(Context context, HttpStack stack, int maxDiskCacheBytes) { …… if (stack == null) { if (Build.VERSION.SDK_INT >= 9) { stack = new HurlStack(); } else { // Prior to Gingerbread, HttpUrlConnection was unreliable. stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); } } Network network = new BasicNetwork(stack); RequestQueue queue; if (maxDiskCacheBytes <= -1) { // No maximum size specified queue = new RequestQueue(new DiskBasedCache(cacheDir), network); } else { // Disk cache size specified queue = new RequestQueue(new DiskBasedCache(cacheDir, maxDiskCacheBytes), network); } queue.start(); return queue; }
public HttpResponse performRequest(Request<?> request, Map<String, String> additionalHeaders) throws IOException, AuthFailureError;第二个参数表示在发起请求前添加的额外的headers。
abstract protected void deliverResponse(T response); abstract protected Response<T> parseNetworkResponse(NetworkResponse response);第二个方法用于解析从网络获取的原数据,第一个方法将解析后的内容传递给相应的回调(它的参数是第二个方法的返回值)。
public byte[] getBody() throws AuthFailureError{} protected Map<String, String> getParams() throws AuthFailureError {}这两个方法主要用来生成http请求报文中的请求数据部分。参考http请求报文和响应报文。
protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> params = new HashMap<String, String>(); params.put("name", "a"); params.put("psw", "b"); return params; }
boolean apply(Request<?> request)如果该方法返回true,那么在RequestQueue取消操作中就会取消该request,否则不会取消。使用到该类的主要有两个方法
public void cancelAll(RequestFilter filter) { synchronized (mCurrentRequests) { for (Request<?> request : mCurrentRequests) { if (filter.apply(request)) { request.cancel(); } } } } public void cancelAll(final Object tag) { if (tag == null) { throw new IllegalArgumentException("Cannot cancelAll with a null tag"); } cancelAll(new RequestFilter() { @Override public boolean apply(Request<?> request) { return request.getTag() == tag; } }); }从第二个方法可以看出tag的用途:用于对Request进行唯一的标识。