深入剖析Android的Volley框架中的图片加载功能

2019-12-10 18:25:44于丽
易采站长站为您分析Android的Volley框架中的图片加载功能,从源码剖析了Volley加载图片时的请求队列处理等方面,需要的朋友可以参考下  

一、基本使用要点回顾

Volley框架在请求网络图片方面也做了很多工作,提供了好几种方法.本文介绍使用ImageLoader来进行网络图片的加载. 
ImageLoader的内部使用ImageRequest来实现,它的构造器可以传入一个ImageCache缓存形参,实现了图片缓存的功能,同时还可以过滤重复链接,避免重复发送请求。 
下面是ImageLoader加载图片的实现方法:

public void displayImg(View view){ 
  ImageView imageView = (ImageView)this.findViewById(R.id.image_view); 
  RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());  
     
  ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache()); 
 
  ImageListener listener = ImageLoader.getImageListener(imageView,R.drawable.default_image, R.drawable.default_image); 
  imageLoader.get("http://www.easck.com/images/home/aw_dac.png", listener); 
  //指定图片允许的最大宽度和高度 
  //imageLoader.get("http://www.easck.com/images/home/aw_dac.png",listener, 200, 200); 
} 

使用ImageLoader.getImageListener()方法创建一个ImageListener实例后,在imageLoader.get()方法中加入此监听器和图片的url,即可加载网络图片.

下面是使用LruCache实现的缓存类

public class BitmapCache implements ImageCache { 
 
  private LruCache<String, Bitmap> cache; 
 
  public BitmapCache() { 
    cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) { 
      @Override 
      protected int sizeOf(String key, Bitmap bitmap) { 
        return bitmap.getRowBytes() * bitmap.getHeight(); 
      } 
    }; 
  } 
 
  @Override 
  public Bitmap getBitmap(String url) { 
    return cache.get(url); 
  } 
 
  @Override 
  public void putBitmap(String url, Bitmap bitmap) { 
    cache.put(url, bitmap); 
  } 
}