【深蓝】Volley 解读1

Volley 框架

 (个人理解,不需要看。只是为了总结。)

       Com.android.volley  框架部分

       Com.android.volley.toolbox 实现部分

先从框架看吧

       RequestQueue 请求队列

只说讲到的Method,不说多余的。

单纯从架构上看Volley。

    public RequestQueue(Cache cache, Network network, int threadPoolSize,
            ResponseDelivery delivery) {
        mCache = cache;
        mNetwork = network;
        mDispatchers = new NetworkDispatcher[threadPoolSize];
        mDelivery = delivery;
    }

  上面说了,单纯从框架的角度说,不说其中的实现。

     个人理解:现在不是非常流行框架式盖房子吗?先把框架做好,然后水泥材料拼命的往里面填,我不管你怎么实现,你只要给我添进去了,能用了,事情就办完了(当然,建筑可不能这样会出人命的。跟软件一个道理,你按照一个规定,把规定实现了,虽然能用,里面的实现乱七八糟,耗用资源,超级多,容易崩溃等等。就跟建筑豆腐渣工程一样。)

      1:Cache Network  ResponseDelivery 这三个就是三个接口。按照其中接口的规定把他们实现,然后直接传入进去,你知道按照规则来,我能用就行。

          Cache 按照接口 实现里面的一系列增删改查操作。

          Network --> public NetworkResponse performRequest(Request<?> request) throws VolleyError; 里面就这一个规定方法,也就是 执行请求方法

        NetworkPesponse 响应是把结果返回来的响应又重新做了一遍封装。 

                  statusCode  data  headers   notModified

                  1:statusCode状态码

                  2: data 结果数据

                   3:headers 结果数据

                  4:如果服务器返回304街和 数据已经在缓存中

    ResponseDelivery  也就是结果回调    正常结果,错误结果。

            

       RequestQueue,Volley应该是为了方便管理修改,自己模拟一个线程池操作,VolleyToolbox默认的网络线程(networkDispatcher)(翻译过来也就是网络分配器,本质其实就是一个Thread)数量为4个(可以自己适当增加减少),缓存线程(cacheDispatcher)数量是1个(1个线程都可以理解如果两个缓存线程同时操作缓存,那该会出现怎么样的结果。)

上面说到4个网络线程(networkDispatcher) 1个缓存(cacheDispatcher) 先说缓存分配器

//缓存分配器构造
CacheDispatcher(
            BlockingQueue<Request<?>> cacheQueue, BlockingQueue<Request<?>> networkQueue,
            Cache cache, ResponseDelivery delivery)

 参数:

  1:cacheQueue这是一个阻塞的缓存队列,请求就会自动取出。然后执行,下步操作,没有请求,就会等待,等待,不占用多少资源。穿这个参数主要意思就是检查缓存里面是否有相同的数据(Volley 默认带一个缓存 能单独保存字符串数据),所以适合网络比较频繁的请求。

  2:如果没有这个缓存,也就是要传入第二个参数networkQueue的原因,没有缓存当然要把这个Request加入到网络队列当中,等待网络调度器调度。

     3:传入这个参数就是缓存的实现,CacheDispatcher是调用这个类存储数据。

     4:第四个参数ResponseDelivery 看名字 也能看出来,是的,响应交付(英语不好 只能这样),正常结果,和Error结果 通过这个类回调。

 

 NetworkDispatcher 网络分配器。上面时候了。Volley默认的是开启4个线程。

先从构造来看:

NetworkDispatcher(BlockingQueue<Request<?>> queue,Network network, Cache cache,ResponseDelivery delivery) 

参数:

  1:队列,应该不用说了。也就是4个线程同时从这个队列中 request = mQueue.take();取出请求。执行请求。

     2:Network -->上面说了。按照一定的规则实例化出来的网络请求。

     3:Cache   开始内容,讲解。

     4:ResponseDelivery 开始内容讲解。

总的来说 四个参数大体的意思就是,上面检查过缓存请求了,如果没有缓存,请求添加到networkQueue中,网络分配器进行分配。而第三个Cache就是 如果需要缓存了。顺便就缓存到这个里面了。

 

每个类都有他自己的职责。

 

RequestQueue 类的职责 就是一个线程池,负责添加请求,开启线程,关闭线程,还有一个清空操作。

CacheDispatcher 职责负责,负责取缓存,如果没有放入网络请求中。

NetworkDispatcher 也就是执行网络请求,还有一个顺便存储Cache结果。

 

 

         

posted @ 2014-04-17 15:36  深蓝Android  阅读(169)  评论(0编辑  收藏  举报