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