ym—— Android网络框架Volley(终极篇)

1.Volley本地缓存为什么有时候不会进行缓存?

缓存使用前提服务器必须支持,缓存,配置Cache-Control头信息,

因为Volley需要从这些头信息判断缓存是否已经过期。如果已经过期Volley将会重新从网络获取数据。

本人用抓包工具抓了无法缓存的返回头信息

可以支持缓存的头信息

2.如果我们自己写一个网络请求框架,我们内部实现会选择使用HttpURLConnection还是HttpClient?

我们通过源码来看看Volley是如何选择使用的

[java] view plaincopyprint?

  1. public static RequestQueue newRequestQueue(Context context, HttpStack stack) {
  2. File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);
  3. String userAgent = "volley/0";
  4. try {
  5. String packageName = context.getPackageName();
  6. PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
  7. userAgent = packageName + "/" + info.versionCode;
  8. } catch (NameNotFoundException e) {
  9. }
  10. if (stack == null) {
  11. if (Build.VERSION.SDK_INT >= 9) {
  12. stack = new HurlStack();
  13. } else {
  14. stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
  15. }
  16. }
  17. Network network = new BasicNetwork(stack);
  18. RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network);
  19. queue.start();
  20. return queue;
  21. }

这里会判断如果手机系统版本号是大于9(Android 2.3)的,则创建一个HurlStack的实例,否则就创建一个HttpClientStack的实例。实际上HurlStack的内部就是使用HttpURLConnection进行网络通讯的,而HttpClientStack的内部则是使用HttpClient进行网络通讯的,这里为什么这样选择呢?参考文章:Android访问网络,使用HttpURLConnection还是HttpClient?这就是它为何这么快的原因。

从这点我们可以学习到,要针对不同SDK版本做去相应更优的处理方式,这样才能达到最好的效果。

3.Volley给我们提供了ImageRrequest,ImageLoader,NetworkImageView,它们分别使用于什么场景为什么?

单张图片的加载可以通过发起请求来实现,但为了应用内存缓存,推荐使用 ImageLoader

NetwoekImageView专门用于批量图片加载的场景:

[java] view plaincopyprint?

  1. public class NetworkImageView extends ImageView {
  2. private String mUrl;
  3. // 默认显示的图片
  4. private int mDefaultImageId;
  5. // 加载失败时显示的图片
  6. private int mErrorImageId;
  7. // 主方法入口
  8. public void setImageUrl(String url, ImageLoader imageLoader) {
  9. mUrl = url;
  10. mImageLoader = imageLoader;
  11. // 这个方法将会对ImageView的尺寸是否有效、是否为同一张图片进行判断
  12. // 在执行新请求前,也会取消上一次在这个View里启动的另一个已经失效的请求
  13. // 由于篇幅的限制以及代码行数太多,这里不贴出具体实现的代码
  14. loadImageIfNecessary(false);
  15. }
  16. // 如果图片已经滑离屏幕,变为不可见,将执行取消请求的操作
  17. @Override
  18. protected void onDetachedFromWindow() {
  19. if (mImageContainer != null) mImageContainer.cancelRequest();
  20. super.onDetachedFromWindow();
  21. }

在ListView加载多张图片的时候,NetworkImageView可以防止出现图片错误的现象,以及当NetworkImageView滑出屏幕的时候会取消加载图片请求,这样就保证加载多张图片的时候用户快速滑动列表的流畅性。给用户带来更优的体验。

时间: 2024-08-27 19:40:29

ym—— Android网络框架Volley(终极篇)的相关文章

ym—— Android网络框架Volley(实战篇)

转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持. 之前讲了ym-- Android网络框架Volley(体验篇),大家应该了解了volley的使用,接下来我们要看看怎样把volley使用到实战项目里面,我们先考虑下一些问题: 从上一篇来看 mQueue 仅仅须要一个对象就可以,new RequestQueue对象对资源一种浪费,我们应该在application.以及能够把取消请求的方法也在application进行统一管理,看下面代

ym—— Android网络框架Volley(体验篇)

<a target=_blank href="https://android.googlesource.com/platform/frameworks/volley" style="font-family: Arial, Helvetica, sans-serif; box-sizing: border-box; background-image: initial; background-attachment: initial; background-color: rg

Android网络框架Volley

Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp 他们各有优劣,之前个人则比较喜欢用Android-async-http, 如今Google推出了官方的针对Android平台上的网络通信库,能使网络通信更快,更简单,更健壮,Volley在提供了高性能网络通讯功能的同时,对网络图片加载也提供了良好的支持,完全可以满足简单REST客户端的需求, 我们

Android网络框架-Volley实践 使用Volley打造自己定义ListView

这篇文章翻译自Ravi Tamada博客中的Android Custom ListView with Image and Text using Volley 终于效果 这个ListView呈现了一些影视信息,每一行是一个影片的信息,每一行中有一张电影的图片,电影的名字.评分.类型.年份等信息. 1.json数据 我们通过解析json然后拿到数据,这个json数据包含json数组.每一个json数组中是一个json对象,json对象中包含了电影的图片url地址.标题.年份.评分.类型等信息 JSO

Android网络框架-Volley实践 使用Volley打造自定义ListView

这篇文章翻译自Ravi Tamada博客中的Android Custom ListView with Image and Text using Volley 最终效果 这个ListView呈现了一些影视信息,每一行是一个影片的信息,每一行中有一张电影的图片,电影的名字.评分.类型.年份等信息. 1.json数据 我们通过解析json然后拿到数据,这个json数据包括json数组,每个json数组中是一个json对象,json对象中包括了电影的图片url地址.标题.年份.评分.类型等信息 JSON

Android 网络框架Volley

Volley简介 在平时的开发过程中,我们的应用几乎总是在和网络打交道, 在android下的网络编程一般都是基于Http协议的 ,常见的是HttpURLConnection和HttpClient 两个类.因为用的比较多,很容易写一些重复的代码,于是就出现了一些比较好的网络框架,像AsyncHttpClient .Xutils,Universal-Image-Loader(网络图片加载框架)等.   Volley是Google在2013年I/O大会上退出的一款新的网络框架,在数据两不大但通信频繁

Android 网络框架 volley源码剖析

转载请注明出处:  http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是对于Volley的工作原理,恐怕有很多朋友还不是很清楚.因此,本篇文章中我们就来一起阅读一下Volley的源码,将它的工作流程整体地梳理一遍.同时,这也是Volley系列的最后一篇文章了. 其实,Volley的官方文档中本身就附有了一张Volley的工作流程图,如下图所示. 多数朋友突然看到一张

android 网络框架 volley

1.首先下载volley的jar包,导入自己的项目中 volley jar包下载 2.JsonArrayRequest简单文本请求 使用下面的代码实现json数据获取 RequestQueue queue = Volley.newRequestQueue(instance); //注意这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求.RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创

Android笔记(六十二)网络框架volley

什么是Volley 很多时候,我们的APP都需要用到网络技术,使用HTTP协议来发送接收数据,谷歌推出了一个网络框架——volley,该框架适合进行数据量不大,但通信频繁的网络操作. 它的优点: (1)默认Android2.3及以上基于HttpURLConnection,2.3以下使用基于HttpClient: (2)符合Http 缓存语义 的缓存机制(提供了默认的磁盘和内存等缓存): (3)请求队列的优先级排序: (4)提供多样的取消机制: (5)提供简便的图片加载工具(其实图片的加载才是我们