volley分析总结

来源:互联网 发布:苹果游戏制作软件 编辑:程序博客网 时间:2024/06/06 03:03

       Volley是google出的一款开源的网络工具,对于复杂的网络请求,利用vooley将会变得简单。Volley对于适用于网络请求比较频繁的应用,但不太适用于大文件传输。

1,RequestQueue

     Volley再用newRequestQueue()方法之后得到RequestQueue在它里面启动了两个线程类CacheDispatcher

和NetworkDispatcher

2,mCacheDispatcher

      volley中mCacheDispatcher本质其实就是一个线程,他要做的工作是:从请求的缓存队列中,挨个遍历请

求,取出请求中的缓存数据,根据缓存数据的状态,来判断是否重新加入网络请求的队列中去。


3,NetworkDispatcher

NetworkDispatcher网络请求派发类,volley中默认的设置了四个这样的线程,网络请求中,run方法中从网

络请求的队里中取出网络请求,网络请求得到的返回数据根据(NetworkResponse包装过的数据),根据request中要求时候缓存来对数据进行缓存

4,Request

 Request,是请求信息的基类,封装了http请求的一些信息,列入:请求方式,编码,设置请求错误监听,设置重试代理,设置绑定,设置对应的打印信息类,设置缓存的key(对应的url),两个抽象方法—

abstractprotected Response<T> parseNetworkResponse(NetworkResponse response);//供子类来解析网络请求得到的NetworkResponse得到想要的返回对象

 abstract protected void deliverResponse(Tresponse);//把请求结果传递给Response中Listener供客户端实现获得。

标注:getParams()请求的body信息是空,如果在StringRequst中用到post请求,则需要对本方法重写,同样getHeaders()方法返回的内容也是空,如果有头信息需要在requst的子类中重写本方法。

5, HttpStack,

HttpStack,真正的网络请求类,根据编译版本的不同来选择是用HttpURLConnection或者HttpClientStack来做数据请求,返回HttpResponse。

6,Network

Network的实现类是BasicNetwork传递的参数是HttpStack实际就是把httpstack请求返回的数据httpRespose进行了封装变成了NetworkResponse。

7,Cache

Cache缓存类,内部一个缓存实体类Entry来存储单个网络请求的信息,在requst的子类中在方法parseNetworkResponse对网请求返回的结果进行解析的时候构建了Cache.Entry对象,在CacheDispatcher中根据Cache.Entry中的元素判断是否对请求重新进行网络加载。

Cache的实现子类是DiskBasedCache,在NetworkDispatcher中根据requst中是否对数据进行缓存来进行本地文件缓存。

8, Response<T>

Response<T>是requst请求方法parseNetworkResponse()中解析获取的返回对象如:StringRequst返回的是Response(String),

JsonArrayRequest返回的是Response<JSONArray>。然后供客户端实现requst的子类时实现Response<T>中的接口Listener<T>来获得response例如:

RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

StringRequest stringRequest = new StringRequest(Request.Method.POST,httpurl,

new Response.Listener<String>() {

        @Override

        public void onResponse(String response) {

            Log.d(TAG, "response -> " + response);

        }

    }, new Response.ErrorListener() {

        @Override

        public void onErrorResponse(VolleyError error) {

            Log.e(TAG, error.getMessage(), error);

        }

    }) {

    @Override

    protected Map<String, String> getParams() {

        //在这里设置需要post的参数

              Map<String, String> map = new HashMap<String, String>();  

            map.put("name1", "value1");  

            map.put("name2", "value2");  

          return params;

    }

};        

requestQueue.add(stringRequest);


9, ResponseDelivery

 ResponseDelivery传递请求信息类,实现类是ExecutorDelivery在CacheDispatcher和NetworkDispatcher中把请求获得结果和请求信息传递给ExecutorDelivery,这个类中做的主要操作就是Response和request中传递信息进行进行再次封装。

未完待续….

 

0 0
原创粉丝点击