volly-first

关于 Volley 的总结

记录,心得,内容来自与codekk的开源项目源码分析

volly 第一步

volly的主要特点
  • 扩展性强,采用借口设置,可配置性强。
  • 提供简便的图片加载工具
总体设计
  • 总体设计图

    主要是通过两种Dispatch Thread 不断从RequestQueue 取出请求,根据是否缓存调用
    cache或Network这两类数据获取接口之一,得到的数据,由ResponseDelivery去做结果
    分发和回调处理。

  • volley概要

    通过newRequestQueue(…)函数新建并启动一个请求队列RequestQueue,只需要在
    RequestQueue不断的add Request 就可以。

volly对外暴露的API,通过newRequestQueue(…)
Request: 表示是一个请求类,StringRequest、JsonRequest、ImageRequest 是它的子类,
表示某种类型的请求。

RequestQueue: 表示请求队列,里面包含一个CacheDispatcher(用于处理走缓存请求的调度)
、NetworkDispatcher数组(处理走网络请求的线程),一个ResponseDelivery(返回结果分发接口),
通过start()函数启动CacheDispatcher和NetworkDispatchers.

CacheDispatcher: 一个线程,用于调度处理缓存的请求,启动后会不断的从缓存队列里取请求处理,
队列为空则等待,将结果传递给ResponseDelivery 去执行后续处理。若结果未缓存过、缓存失效或是
需要刷新的情况下,该请求需要去NetworkDispatcher去调度处理。

NetworkDispatcher: 线程,用于调度处理走网络的请求。将结果传递给ResponseDelivery去执行
后续处理,并判断结果是否要进行缓存。

ResponseDelivery: 返回结果分发接口。目前只有基于ExecutorDelivery的在入参handler对应线程进行分发。
HttpStack: 处理http请求,返回请求结果。volly里面有基于HttpURLConnection的HurlStack和基于
Apache HttpClient的HttpClientStack.

Network: 调用HttpStack处理请求,并将结果转换为可被ResponseDelivery处理的NetworkResponse.

Cache: 缓存请求结果,volley默认使用的是基于sdcard的DiskBaseCache, NetworkDispatcher得到
请求结果后判断是否需要存储在cache,CacheDispatcher会从Cache中取缓存结果。

流程图

volley请求流程图

4. 详细设计

4.1 类关系图


这是volley框架的主要类关系图
图内红色圈内的部分,组成了volley框架的核心,围绕着RequestQueue类,将各个功能点以组合的方式
结合在一起。各个功能点也是以接口或者抽象类的形式提供。
红色圈外的部分,在volley源码中放在了toolbox 包中,作为volley为各个功能点提供默认的具体实现。
通过类图,volley有着非常好的拓展性,通过各个功能点的接口,可以自定义更符合实际需要的实现

多用组合,少用继承;针对接口编程,不针对具体实现编程。
一个优秀框架的设计!

4.2 核心功能介绍
4.2.1 Volley.java