博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【深蓝】Volley 解读1
阅读量:5750 次
发布时间:2019-06-18

本文共 2470 字,大约阅读时间需要 8 分钟。

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
> cacheQueue, BlockingQueue
> networkQueue, Cache cache, ResponseDelivery delivery)

 参数:

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

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

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

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

 

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

先从构造来看:

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

参数:

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

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

     3:Cache   开始内容,讲解。

     4:ResponseDelivery 开始内容讲解。

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

 

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

 

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

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

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

 

 

         

转载于:https://www.cnblogs.com/a-blue/p/3670894.html

你可能感兴趣的文章
Mongodb启动命令mongod参数说明
查看>>
TCP&UDP压力测试工具
查看>>
Linux使用Shell脚本实现ftp的自动上传下载(转)
查看>>
卷轴式游戏地图实现
查看>>
[IOI1999]花店橱窗布置(DP路径记录)
查看>>
oracle 导入数据
查看>>
js 闭包 原型
查看>>
首个5G智慧机场落地广州 速度是4G的50倍
查看>>
持续集成是什么
查看>>
JavaScript设计模式之面向对象编程
查看>>
Android 最简单的自定义Dialog之一
查看>>
磨刀不误砍柴 - 配置适合工作学习的桌面环境
查看>>
自己动手写docker-3
查看>>
Java笔记-反射机制(一)
查看>>
OpenCV在Android中的集成与简单使用
查看>>
redux v3.7.2源码解读与学习之 applyMiddleware
查看>>
【React】为什么我不再使用setState?
查看>>
Git原理与高级使用(3)
查看>>
从JDK源码看Writer
查看>>
Express 结合 Webpack 实现HMRwi
查看>>