如何在android中实现图像缓存 - 凌空?

时间:2014-01-22 14:33:53

标签: android caching android-volley

根据我的理解,我们需要提供LRU cache的实现,并将其作为构造函数传递给图像加载器。

volley中还有一个默认的基于磁盘的缓存。此基于磁盘的缓存用于缓存HTTP响应。

**下载的图像包含缓存标题时将使用哪个缓存?

  1. LRU(自己实施)
  2. 默认光盘缓存实现存在于volley工具箱包* 强文本 * **中 公共类BitmapLruCache扩展LruCache实现ImageLoader.ImageCache
  3. {

    public static int getDefaultLruCacheSize() {
        final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
        final int cacheSize = maxMemory / 8;
    
        return cacheSize;
    }
    
    public BitmapLruCache() {
        this(getDefaultLruCacheSize());
    }
    
    public BitmapLruCache(int sizeInKiloBytes) {
        super(sizeInKiloBytes);
    }
    
    @Override
    protected int sizeOf(String key, Bitmap value) {
        return value.getRowBytes() * value.getHeight() / 1024;
    }
    
    @Override
    public Bitmap getBitmap(String url) {
        return get(url);
    }
    
    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        put(url, bitmap);
    }}
    

    这是用于在网络视图中设置图像的调用

    ImageLoader mImageLoader = new          ImageLoader(ApplicationController.getInstance().getRequestQueue(), new BitmapLruCache());
     holder.imageicon.setImageUrl(i.getThumb_image(), mImageLoader);
    

1 个答案:

答案 0 :(得分:0)

LRU缓存用于缓存图像。查看ImageLoader的源代码 - 使用ImageCache,这是一个界面,可让您在扩展LruCache中实现。因此,您的缓存会扩展LruCache<String,Bitmap>并实施ImageCache

volley提供的默认缓存用于它获得的每个响应,默认缓存是根据HTTP响应的缓存头进行的。因此,如果它们具有正确的缓存标头,它们将被缓存在磁盘上,如果它们不缓存,则它们不会。

因此,要完整地回答您的问题,可能会使用两个缓存 - 但就检索图像而言,将使用内存缓存(或您的lru缓存)。