您的位置:首页 > 移动开发 > Android开发

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 的发布演讲中给出,我在这里将其用中文重新画出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: