【深蓝】Volley 解读1

Volley 框架java

 (我的理解,不须要看。只是为了总结。)android

       Com.android.volley  框架部分缓存

       Com.android.volley.toolbox 实现部分服务器

先从框架看吧网络

       RequestQueue 请求队列架构

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

单纯从架构上看Volley。spa

    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结果。

相关文章
相关标签/搜索