volley分析总结
来源:互联网 发布:苹果游戏制作软件 编辑:程序博客网 时间:2024/06/06 03:03
Volley是google出的一款开源的网络工具,对于复杂的网络请求,利用vooley将会变得简单。Volley对于适用于网络请求比较频繁的应用,但不太适用于大文件传输。
1,RequestQueue
Volley再用newRequestQueue()方法之后得到RequestQueue在它里面启动了两个线程类CacheDispatcher
和NetworkDispatcher
2,mCacheDispatcher
volley中mCacheDispatcher本质其实就是一个线程,他要做的工作是:从请求的缓存队列中,挨个遍历请
求,取出请求中的缓存数据,根据缓存数据的状态,来判断是否重新加入网络请求的队列中去。
3,NetworkDispatcher
NetworkDispatcher网络请求派发类,volley中默认的设置了四个这样的线程,网络请求中,run方法中从网
络请求的队里中取出网络请求,网络请求得到的返回数据根据(NetworkResponse包装过的数据),根据request中要求时候缓存来对数据进行缓存
4,Request
Request,是请求信息的基类,封装了http请求的一些信息,列入:请求方式,编码,设置请求错误监听,设置重试代理,设置绑定,设置对应的打印信息类,设置缓存的key(对应的url),两个抽象方法—
abstractprotected Response<T> parseNetworkResponse(NetworkResponse response);//供子类来解析网络请求得到的NetworkResponse得到想要的返回对象
abstract protected void deliverResponse(Tresponse);//把请求结果传递给Response中Listener供客户端实现获得。
标注:getParams()请求的body信息是空,如果在StringRequst中用到post请求,则需要对本方法重写,同样getHeaders()方法返回的内容也是空,如果有头信息需要在requst的子类中重写本方法。
5, HttpStack,
HttpStack,真正的网络请求类,根据编译版本的不同来选择是用HttpURLConnection或者HttpClientStack来做数据请求,返回HttpResponse。
6,Network
Network的实现类是BasicNetwork传递的参数是HttpStack实际就是把httpstack请求返回的数据httpRespose进行了封装变成了NetworkResponse。
7,Cache
Cache缓存类,内部一个缓存实体类Entry来存储单个网络请求的信息,在requst的子类中在方法parseNetworkResponse对网请求返回的结果进行解析的时候构建了Cache.Entry对象,在CacheDispatcher中根据Cache.Entry中的元素判断是否对请求重新进行网络加载。
Cache的实现子类是DiskBasedCache,在NetworkDispatcher中根据requst中是否对数据进行缓存来进行本地文件缓存。
8, Response<T>
Response<T>是requst请求方法parseNetworkResponse()中解析获取的返回对象如:StringRequst返回的是Response(String),
JsonArrayRequest返回的是Response<JSONArray>。然后供客户端实现requst的子类时实现Response<T>中的接口Listener<T>来获得response例如:
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
StringRequest stringRequest = new StringRequest(Request.Method.POST,httpurl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "response -> " + response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getMessage(), error);
}
}) {
@Override
protected Map<String, String> getParams() {
//在这里设置需要post的参数
Map<String, String> map = new HashMap<String, String>();
map.put("name1", "value1");
map.put("name2", "value2");
return params;
}
};
requestQueue.add(stringRequest);
9, ResponseDelivery
ResponseDelivery传递请求信息类,实现类是ExecutorDelivery在CacheDispatcher和NetworkDispatcher中把请求获得结果和请求信息传递给ExecutorDelivery,这个类中做的主要操作就是Response和request中传递信息进行进行再次封装。
未完待续….
- volley分析总结
- Volley分析
- Volley 分析
- volley总结
- Volley总结
- Volley总结
- volley总结
- Android Volley分析
- Volley分析(1)
- Android-Volley源码分析
- Volley框架分析
- [Android]volley源码分析
- Volley源码分析
- Volley源码分析
- Volley框架分析
- Volley框架深入分析
- Volley源码分析
- Volley -- 源码分析
- 月薪2w的程序员技能
- JUC源码分析3-原子变量-AtomicIntegerFieldUpdater/AtomicLongFieldUpdater/AtomicReferenceFieldUpdater
- UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
- 整理标签
- QT 文件管理
- volley分析总结
- JDBC笔记-基本操作
- web.xml配置文件介绍
- MyEclipse 中各种 libraries 的含义
- ajax在ie上不能用了
- mysql分库分表的一些技巧
- ScrollView滚动改变标题栏透明度
- maven基础教程(一)
- poj 3080 Blue Jeans kmp 字符串匹配