Volley原理解析

1.Volley底层常用类的分析:

  • Volley:对外暴露的API,通过newRequestQueen()函数创建并启动一个请求队列RequestQueen。
  • Request:表示一个请求的抽象类。StringRequest,JsonRequest,ImageRequest都是它的子类,表示某种类型的请求。
  • RequestQueen:表示请求队列,里面包含一个CacheDispatcher(用于处理走缓存请求的调度线程)、NetworkDispatcher(用于处理走网络请求的调度线程),一个ResponseDelivery(返回结果分发接口)通过start()函数时会启动CacheDispatcher和NetworkDispatcher。
  • CacheDispatcher:一个线程,用于调度处理走缓存的请求,启动后会不断的从缓存请求队列读取请求处理,队列为空则等待,请求结果返回给ResponseDelivery去执行后续处理,当结果未缓存过,缓存失效或缓存需要刷新的情况下,该请求都需要重新进入NetworkDispatcher去调度处理。
  • NetworkDispatcher:一个线程,用于处理走网络网络的请求,启动后会不断的从网络请求队列中取请求处理,队列为空则等待,请求处理结束后将结果传递给ResponseDelivery,并判断结果是否需要缓存。
  • ResponseDelivery:返回结果分发接口,目前只有基于ExecutorDelivery的
  • HttpStack:处理http请求,返回请求结果,目前Volley中只有基于HttpUrlConnection的HurlStack和基于Apache HttpClient的HttpClientStack。
  • Network:调用HttpStack处理请求,并将结构转换为可被ResponseDelivery处理的NetworkResponse。
  • Cache:缓存请求结果,默认使用的是基于sdCard的DiskBasedCache。NetworkDispatcher得到请求结果后判断是否需要存储在Cache,CacheDispatcher会从Cache中取缓存结果。

2.Volley的底层框架分析:

说到Volley框架,就需要说三个类,Volley、Request、RequestQueen。
Volley对外暴露的api,主要通过newRequestQueen的到HttpStack。然后通过它构造一个代表网络(Network)的具体的实现BasicNetwork,接着构造一个代表缓存(Cache)的基于Disk的具体实现DiskBasedCache。最后将网络对象和缓存对象传入构建一个RequestQueen,启动这个RequestQueen,并返回。
Request类代表一个网络请求的抽象类。我们通过构建一个Request类的非抽象子类(StringRequest、JsonRequest、ImageRequest或自定义)
对象,并将其加入到·RequestQueue·中来完成一次网络请求操作。Request 类中包含了请求 url,请求请求方式,请求 Header,请求 Body,请求的优先级等信息。
RequestQueue是Volley框架的核心类,将请求Request加入到一个运行的RequestQueue中,来完成请求操作。加入请求到队列当中,首先判断请求是否允许缓存处理,若果不允许则将请求放到网络请求队列中,如果允许就会判断请求队列中是否有相同的请求正在处理,如果有则加入到等待队列中,一直等已经存在的请求处理完后再放入缓存队列中,如果不相同则添加当前请求到缓存队列

你可能感兴趣的:(Volley原理解析)