Android应用框架-Volley网络通信框架
1.Volley简介:
- Volley是Google 推出的 Android 异步网络请求框架和图片加载框架。
- 在 Google I/O 2013 大会上发布。
2.Volley特点
- 扩展性强。
- Android目前提供两种http通信方式:在 Android2.3 及以上基于 HttpURLConnection,2.3 以下基于 HttpClient 实现。
- 提供简便的图片加载工具。(例如:ImageLoader。它的构造器可以传入一个ImageCache缓存形参,实现了图片缓存的功能,同时还可以过滤重复链接,避免重复发送请求)
- 综合上述特点:Volley特别适合数据量小,通信频繁的网络操作。(个人认为 Android 应用中绝大多数的网络操作都属于这种类型)。
3.Volley总体设计

1.RequestQueue:表示请求队列,其中StringRequest、JsonRequest、ImageRequest 都是Request的子类代表各种类型的请求。
2.Dispatcher Thread:一个线程,用于调度处理各种请求。其中CacheDispatcher(用于调度和处理走缓存的请求)和NetworkDispatcher(用于调度和处理走网络的请求)。
3.Get Data Interface:获取数据的接口。其中Cache 和netWork是两类数据获取接口。CacheDispatcher调用Cache从内存缓存中获取数据。NetworkDispatcher调用netWork类,让netWork类调用httpStack去处理Http请求,从服务器上面获取数据。
4.Data:走缓存路线的数据存放在Memory和FileSystem。走网络路线的数据存放在server服务器中。
综上所述:从 Volley 的总体设计图中可以发现,该设计主要是通过两种Dispatch Thread不断从RequestQueue中取出请求,根据是否已缓存,调用Cache或Network这两类数据获取接口之一,从内存缓存或是服务器取得请求的数据,然后交由ResponseDelivery去做结果分发及回调处理。
Volley设计流程图:

Volley在Android项目应用:
1.RequestQueue的构建:
通过Volley.java这个工具类,来构建一个可用于添加网络请求的RequestQueue对象。
A.mQueue = Volley.newRequestQueue(mContext);
B.mQueue = Volley.newRequestQueue(mContext,mHttpStack);
上面两个方法的区别:A方法是默认的实现构造RequestQueue对象的方法。B方法中newRequestQueue静态方法中比A多了一个HttpStack参数,这个参数我们可以自定义,也可以采用基于 HttpURLConnection 的 HurlStack和基于HttpClient的 HttpClientStack。
2.Request请求的构建:
通过Request.java这个网络请求的抽象类,来构建一个request类的非抽象子类(StringRequest、JsonRequest、ImageRequest 或自定义)对象,并将其加入到RequestQueue中来完成一次网络请求操作。
以自定义的类为例来讲解:自定义一个CommonRequest<T>类。
A.当网络请求返回数据是String类型时。
CommonRequest<String> request = new CommonRequest<>(mContext, HttpRequest.METHOD_GET,PARSING_TYPE.SEND_ID_CODE_URL, params, response, new TypeToken<Result<String>>() {}, null);
B.当网络请求返回数据是某个自定义的具体的类,例如,User.java。
CommonRequest<User> request = new CommonRequest<>(mContext, HttpRequest.METHOD_GET,PARSING_TYPE.SEND_ID_CODE_URL, params, response, new TypeToken<Result<User>>() {}, null);
3.将Request请求添加到RequestQueue中:
直接调用RequestQueue类中的add方法即可。
mQueue.add(request);
4.启动RequestQueue队列。
直接调用RequestQueue类中的start方法即可。
mQueue.start();
start ()方法中,开启一个缓存调度线程CacheDispatcher和 n 个网络调度NetworkDispatcher,缓存调度线程不断的从缓存请求队列中取出 Request 去处理,网络调度线程不断的从网络请求队列中取出 Request 去处理。
CacheDispatcher流程图:

NetWorkDispatcher流程图:

Android应用框架-Volley网络通信框架的更多相关文章
- Android开发之Volley网络通信框架
今天用了一下Volley网络通信框架,感觉挺好用的,写个博客记录一下用法.方便以后VC. Volley(Google提供的网络通信库,能使网络通信更快,更简单,更健壮.) 功能模块: 1. JSON, ...
- Volley网络通信框架
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- Android-Volley网络通信框架(自己定义Request 请求:实现 GsonRequest)
1.回想 上篇学习了android 通过 volley 网络通信框架 实现 请求图片的三种方法! 2.重点 (1)复习和熟悉 StringRequest ,JsonObjectRequest 方法 ( ...
- Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))
1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片 ...
- Android 网络通信框架Volley简介(Google IO 2013)
1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient( ...
- [转]Android 网络通信框架Volley简介(Google IO 2013)
Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v= ...
- 【转】Android 网络通信框架Volley简介(Google IO 2013)
Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v= ...
- Android 网络通信框架Volley(一)
转自:http://blog.csdn.net/t12x3456/article/details/9221611 1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫 ...
- Android 网络通信框架Volley的简单使用
Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮. Volley提供的功能: JSON,图像等的异步下载: 网络请求的排序(scheduling) 网络请求的优先级处理 ...
随机推荐
- shell脚本 入门 —— 符号篇
shell Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive). Shell还有一种执行命令的方式称 ...
- EF Code-First 学习之旅 一对多的关系
public class Student { public Student() { } public int StudentId { get; set; } public string Student ...
- Django之ModelForm详解
前言 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来.先来一个简单的例子来看一下这个东西怎么用: 比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱 ...
- 门户diy实现翻页功能的方法
1.打开 \source\class\block\portal\block_article.php 文件 找到 function getdata($style, $parameter) 修改为 fun ...
- Netty官方示例
一.DEMO 官方并没有使用Hello World来作为一个例子,而是采用RFC的DISCARD,这个协议定义了就是接收到请求后什么也不干. 第一步编写DiscardServerHandler类: p ...
- yii2: 上传图片,生成目录
1.单个文件上传 首先建立一个模型models/UploadForm.php,内容如下 namespace app\models; use yii\base\Model; use yii\web\Up ...
- Ajax的跨域问题(包括解决方案)?
原因:js的同源策略限制,不同源会造成跨域 哪些情况会造成跨域? 子域名不同(WWW) 2.主域名不同(baidu.com) 3.端口号不同 4.IP地址和网址不同 解决方案: 使用jsonp技术,但 ...
- Python 用Redis简单实现分布式爬虫
Redis通常被认为是一种持久化的存储器关键字-值型存储,可以用于几台机子之间的数据共享平台. 连接数据库 注意:假设现有几台在同一局域网内的机器分别为Master和几个Slaver Master连接 ...
- mongodb之一些简单的增删改查语句
数据库操作:show dbs;#查看数据库use test;#如果没有就创建一个db;#查看当前数据库db.dropDatabase();#删除数据库 数据操作:show collections:#查 ...
- c语言中的string
1. strlen(char const* s); 函数传入的是c风格字符串(即以‘\0’结尾的字符数组),返回的长度为size_t(即unsigned int),其长度不包括'\0'. 2. str ...