Android——Volley学习笔记(一)
2015-08-20 17:39
344 查看
1. 功能介绍
1.1. Volley
Volley 是 Google 推出的 Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。名字由来:a burst or emission of many things or a large amount at once
发布演讲时候的配图
从名字由来和配图中无数急促的火箭可以看出 Volley 的特点:特别适合数据量小,通信频繁的网络操作。(个人认为 Android 应用中绝大多数的网络操作都属于这种类型)。
1.2 Volley 的主要特点
(1). 扩展性强。Volley 中大多是基于接口的设计,可配置性强。(2). 一定程度符合 Http 规范,包括返回 ResponseCode(2xx、3xx、4xx、5xx)的处理,请求头的处理,缓存机制的支持等。并支持重试及优先级定义。
(3). 默认 Android2.3 及以上基于 HttpURLConnection,2.3 以下基于 HttpClient 实现,这两者的区别及优劣在
4.2.1 Volley中具体介绍。
(4). 提供简便的图片加载工具。
2. 总体设计
2.1 总体设计图
上面是 Volley 的总体设计图,主要是通过两种
Dispatch Thread不断从
RequestQueue中取出请求,根据是否已缓存调用
Cache或
Network这两类数据获取接口之一,从内存缓存或是服务器取得请求的数据,然后交由
ResponseDelivery去做结果分发及回调处理。
2.2 Volley 中的概念
简单介绍一些概念,在详细设计中会仔细介绍。
Volley 的调用比较简单,通过 newRequestQueue(…) 函数新建并启动一个请求队列
RequestQueue后,只需要往这个
RequestQueue不断 add Request 即可。
**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 中取缓存结果。
3. 流程图
Volley 请求流程图上图是 Volley 请求时的流程图,在 Volley 的发布演讲中给出,我在这里将其用中文重新画出。
相关文章推荐
- Android RecyclerView 使用完全解析
- IT痴汉的工作现状42-Android越用越慢?立场不同,谈何信任!
- Android最佳性能实践(1):合理管理内存
- Android ListView异步加载图片乱序问题,原因分析及解决方案
- 星云测试-给你的Android应用做个深度体检
- android sdk下载地址
- 解决出现android.os.NetworkOnMainThreadException异常
- Android数据库的批处理操作
- 【Android】时光轴效果
- 超炫的Android高仿知乎日报项目正式开源
- Android Service与Activity之间通信的几种方式
- Android笔记(六)利用Intent传递数据
- Android实例-闪光灯的控制(XE8+小米2)
- recyclerview的基本用法(一)
- Android L 5.0版本获取topActivity的方法
- 安卓突击:Android 动画有哪几种?
- Android性能优化之内存篇-google
- Android中AsyncTask的简单用法
- android --学习导航
- Android开发最佳实践