Volley框架之二 基本流程
来源:互联网 发布:软件测试逻辑思维题 编辑:程序博客网 时间:2024/05/24 00:10
架构
先来张整体的架构图
其中蓝色部分代表主线程,绿色部分代表缓存线程,橙色部分代表网络线程。我们在主线程中调用RequestQueue的add()方法来添加一条网络请求,这条请求会先被加入到缓存队列当中,如果发现可以找到相应的缓存结果就直接读取缓存并解析,然后回调给主线程。如果在缓存中没有找到结果,则将这条请求加入到网络请求队列中,然后处理发送HTTP请求,解析响应结果,写入缓存,并回调主线程
基本流程的介绍看这里 Android Volley完全解析(四),带你从源码的角度理解Volley
更详细的介绍看这里 Volley 源码解析
1. 扩展性强。Volley 中大多是基于接口的设计,可配置性强。
2. 一定程度符合 Http 规范,包括返回 ResponseCode(2xx、3xx、4xx、5xx)的处理,请求头的处理,缓存机制的支持等。并支持重试及优先级定义。
3. 默认 Android2.3 及以上基于 HttpURLConnection,2.3 以下基于 HttpClient 实现。
4. 提供简便的图片加载工具。
总体设计图
来一张更详细的
Volley:Volley 对外暴露的 API,通过 newRequestQueue(…) 函数新建并启动一个请求队列RequestQueue。
Request:表示一个请求的抽象类。StringRequest、JsonRequest、ImageRequest 都是它的子类,表示某种类型的请求。
RequestQueue:表示请求队列,里面包含一个CacheDispatcher(用于处理走缓存请求的调度线程)、NetworkDispatcher数组(用于处理走网络请求的调度线程),一个ResponseDelivery(返回结果分发接口),通过 start() 函数启动时会启动CacheDispatcher和NetworkDispatchers。
CacheDispatcher:一个线程,用于调度处理走缓存的请求。启动后会不断从缓存请求队列中取请求处理,队列为空则等待,请求处理结束则将结果传递给ResponseDelivery去执行后续处理。当结果未缓存过、缓存失效或缓存需要刷新的情况下,该请求都需要重新进入NetworkDispatcher去调度处理。
NetworkDispatcher:一个线程,用于调度处理走网络的请求。启动后会不断从网络请求队列中取请求处理,队列为空则等待,请求处理结束则将结果传递给ResponseDelivery去执行后续处理,并判断结果是否要进行缓存。
ResponseDelivery:返回结果分发接口,目前只有基于ExecutorDelivery的在入参 handler 对应线程内进行分发。
HttpStack:处理 Http 请求,返回请求结果。目前 Volley 中有基于 HttpURLConnection 的HurlStack和 基于 Apache HttpClient 的HttpClientStack。
Network:调用HttpStack处理请求,并将结果转换为可被ResponseDelivery处理的NetworkResponse。
Cache:缓存请求结果,Volley 默认使用的是基于 sdcard 的DiskBasedCache。NetworkDispatcher得到请求结果后判断是否需要存储在 Cache,CacheDispatcher会从 Cache 中取缓存结果。
详细设计图
图中红色圈内的部分,组成了 Volley 框架的核心,围绕 RequestQueue 类,将各个功能点以组合的方式结合在了一起。各个功能点也都是以接口或者抽象类的形式提供。
红色圈外面的部分,在 Volley 源码中放在了 toolbox 包中,作为 Volley 为各个功能点提供的默认的具体实现。
通过类图我们看出, Volley 有着非常好的拓展性。通过各个功能点的接口,我们可以给出自定义的,更符合我们需求的具体实现。
多用组合,少用继承;针对接口编程,不针对具体实现编程。
优秀框架的设计,令人叫绝,受益良多。
这里就不多说了,Volley 源码解析 已经说的非常非常详细了
- Volley框架之二 基本流程
- Volley框架之二 基本流程
- Volley框架的基本解读(二)
- Volley源码分析之基本流程
- android常见框架基本使用之-Volley
- android网络框架volley学习之基本数据类
- Android高级之Volley框架(二):JsonRequest
- 网络请求框架(二):volley使用之自定义请求
- Volley框架(二):使用Volley加载图片
- Volley框架的基本使用方法
- Volley框架的基本使用方法
- Android之Volley框架
- 网络框架之volley
- Volley框架解读(二)
- Android Volley框架使用(二)
- Android Volley框架使用(二)
- 谷歌Volley网络框架分析。(二)数据回调流程
- Spring框架学习之二使用流程
- jzoj. 3521. 【NOIP2013模拟11.7B组】道路覆盖(cover)
- Huffman树
- easyui-dialog
- 浅析Android自定义view
- Activity和Fragment Transition
- Volley框架之二 基本流程
- 欢迎使用CSDN-markdown编辑器
- 使用NvEncoder编码为H264数据时的输出
- PAT (Advanced Level) Practise 1075 PAT Judge (25)
- CALayer的mask属性简介
- 【二分查找】查找数组中第一个比k大的数的下标
- 「LibreOJ NOI Round #1」接竹竿 (dp+前缀和优化)
- node.js使用url下载文件
- Tensorflow结构简介