ym—— Android网络框架Volley(终极篇)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103)。谢谢支持!
没看使用过Volley的同学能够,先看看Android网络框架Volley(体验篇)和Android网络框架Volley(实战篇)在进行本篇学习这样会更好的理解本篇内容.
本篇内容主要是讲Volley在某些细节方面的选择和实现.值得我们学习的地方以及假设更好的使用Volley。
1.Volley本地缓存为什么有时候不会进行缓存?
缓存使用前提server必须支持。缓存,配置Cache-Control头信息,
由于Volley须要从这些头信息推断缓存是否已经过期。假设已经过期Volley将会又一次从网络获取数据。
本人用抓包工具抓了无法缓存的返回头信息
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
能够支持缓存的头信息
2.假设我们自己写一个网络请求框架。我们内部实现会选择使用HttpURLConnection还是HttpClient?
我们通过源代码来看看Volley是怎样选择使用的
public static RequestQueue newRequestQueue(Context context, HttpStack stack) {
File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);
String userAgent = "volley/0";
try {
String packageName = context.getPackageName();
PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
userAgent = packageName + "/" + info.versionCode;
} catch (NameNotFoundException e) {
}
if (stack == null) {
if (Build.VERSION.SDK_INT >= 9) {
stack = new HurlStack();
} else {
stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
}
}
Network network = new BasicNetwork(stack);
RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network);
queue.start();
return queue;
}
这里会推断假设手机系统版本是大于9(Android 2.3)的。则创建一个HurlStack的实例,否则就创建一个HttpClientStack的实例。实际上HurlStack的内部就是使用HttpURLConnection进行网络通讯的,而HttpClientStack的内部则是使用HttpClient进行网络通讯的,这里为什么这样选择呢?參考文章:Android訪问网络。使用HttpURLConnection还是HttpClient?这就是它为何这么快的原因。
从这点我们能够学习到。要针对不同SDK版本号做去对应更优的处理方式,这样才干达到最好的效果。
3.Volley给我们提供了ImageRrequest,ImageLoader。NetworkImageView,它们分别使用于什么场景为什么?
单张图片的载入能够通过发起
ImageReuqst 请求来实现。但为了应用内存缓存,推荐使用 ImageLoader
NetwoekImageView专门用于批量图片载入的场景:
public class NetworkImageView extends ImageView {
private String mUrl;
// 默认显示的图片
private int mDefaultImageId;
// 载入失败时显示的图片
private int mErrorImageId;
// 主方法入口
public void setImageUrl(String url, ImageLoader imageLoader) {
mUrl = url;
mImageLoader = imageLoader;
// 这种方法将会对ImageView的尺寸是否有效、是否为同一张图片进行推断
// 在运行新请求前,也会取消上一次在这个View里启动的还有一个已经失效的请求
// 因为篇幅的限制以及代码行数太多,这里不贴出详细实现的代码
loadImageIfNecessary(false);
}
// 假设图片已经滑离屏幕。变为不可见,将运行取消请求的操作
@Override
protected void onDetachedFromWindow() {
if (mImageContainer != null) mImageContainer.cancelRequest();
super.onDetachedFromWindow();
}
}
在ListView载入多张图片的时候,NetworkImageView能够防止出现图片错误的现象,以及当NetworkImageView滑出屏幕的时候会取消载入图片请求。这样就保证载入多张图片的时候用户高速滑动列表的流畅性。给用户带来更优的体验。
ym—— Android网络框架Volley(终极篇)的更多相关文章
- ym—— Android网络框架Volley(体验篇)
VolleyGoogle I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
- Android网络框架Volley(体验篇)
Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
- Android网络框架Volley(实战篇)
之前讲了ym—— Android网络框架Volley(体验篇),大家应该了解了volley的使用,接下来我们要看看如何把volley使用到实战项目里面,我们先考虑下一些问题: 从上一篇来看 mQu ...
- Android网络框架Volley
Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
- Android网络框架-Volley实践 使用Volley打造自己定义ListView
这篇文章翻译自Ravi Tamada博客中的Android Custom ListView with Image and Text using Volley 终于效果 这个ListView呈现了一些影 ...
- Android 网络框架Volley的使用
Volley简介 在平时的开发过程中,我们的应用几乎总是在和网络打交道, 在android下的网络编程一般都是基于Http协议的 ,常见的是HttpURLConnection和HttpClient 两 ...
- Android 网络框架 volley源码剖析
转载请注明出处: http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了, ...
- Android 网络框架---Volley
/** * Volley 可以同时请求多个,允许高并发 * 特性: * 1.JSON.图片等的异步下载 * 2.网络请求的排序(Scheduling) * 3.网络请求的优先级处理 * 4.缓存 * ...
- Android热门网络框架Volley详解[申明:来源于网络]
Android热门网络框架Volley详解[申明:来源于网络] 地址:http://www.cnblogs.com/caobotao/p/5071658.html
随机推荐
- js 获取现在时间一个月(N天)后的日期
欢迎加入前端交流群交流知识&&获取视频资料:749539640 let today = new Date().getTime() let lastDay = getTimeByDay( ...
- php 判断过去离现在几年的函数
function gettime($worktime){ $time=time(); $amount=date("Y",$time)-date("Y",strt ...
- TexturePacker贴图打包工具
1.该软件是收费的,不过对于这么一款实用的工具来说,物有所值,下载地址 http://www.codeandweb.com/texturepacker 2.openGL载入纹理图片的时候,所用内存是会 ...
- CentOS6.5下编译R源码并安装Spark R
不多说,直接上干货! 为了使用SparkR,决定要在Spark所在的Linux上装上R,结果血泪篇了.主要原因是公司内部的虚机,无法连外网,所以网上很多的直接rpm或者yum的方法都没用,需要自己编译 ...
- SVG剪裁路径和遮罩jQuery幻灯片
SVG剪裁路径和遮罩jQuery幻灯片是一款基于SVG clipPath和mask遮罩元素实现的网站动画幻灯片代码特效. 在线演示本地下载
- GCC编译步骤
gcc -E t1.c -o t1.i 预处理gcc -S t1.i -o t1.s 转成汇编语言gcc -c t1.s -o t1.o 转成机器码gcc t1.o -o t1.exe 链接 直接使用 ...
- Kafka 分布式消息系统详解
实际上kafka对机器的需求与Hadoop的类似. 原来,对于Linkin这样的互联网企业来说,用户和网站上产生的数据有三种: 需要实时响应的交易数据,用户提交一个表单,输入一段内容,这种数据最后是存 ...
- (转)shiro权限框架详解05-shiro授权
http://blog.csdn.net/facekbook/article/details/54910606 本文介绍 授权流程 授权方式 授权测试 自定义授权realm 授权流程 开始构造Secu ...
- nutz 自定义sql的使用
虽然提供了Cnd,但是用起来是觉得有点不方便,然后就直接编写Sql语句.nutz提供了一些方法. Nutz.Dao 的自定义 SQL 部分的解决方案是: // 不推荐使用 用户可以硬编码 SQL 语句 ...
- JdbcTemplate 增删查改
准备工作:1,拷贝工具类JDBCUtils, 2,导入包commons-logging-1.2-javadoc.jar spring-beans-5.0.0.RELEASE-javadoc.jar ...