gpt4 book ai didi

android - Volley 和位图缓存

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:37:48 26 4
gpt4 key购买 nike

我正在尝试显示包含大量(远程)图像的 ListView 。我正在尝试使用 volley 来完成这项任务。

截击有些效果,但还不够好。在ImageLoader.get volley中有如下一段代码:

    final String cacheKey = getCacheKey(requestUrl, maxWidth, maxHeight);

// Try to look up the request in the cache of remote images.
Bitmap cachedBitmap = mCache.getBitmap(cacheKey);
if (cachedBitmap != null) {
// Return the cached bitmap.
ImageContainer container = new ImageContainer(cachedBitmap, requestUrl, null, null);
imageListener.onResponse(container, true);
return container;
}

但是,getCacheKey 生成的 key 如下所示:

/**
* Creates a cache key for use with the L1 cache.
* @param url The URL of the request.
* @param maxWidth The max-width of the output.
* @param maxHeight The max-height of the output.
*/
private static String getCacheKey(String url, int maxWidth, int maxHeight) {
return new StringBuilder(url.length() + 12).append("#W").append(maxWidth)
.append("#H").append(maxHeight).append(url).toString();
}

即它将一些“元数据”(如宽度和高度)附加到 key 。

此键从不 产生命中,如果图像不在 L1 缓存中,则会联机获取。当在线获取图像时,它会保存在磁盘缓存中,但 Volley 会使用 URL(并且仅使用 URL)作为键来保存它。

这是预期的行为吗?我错过了什么吗?

最佳答案

您没有获得任何点击的原因是因为 Volley 中磁盘缓存的默认行为取决于您请求的元素(在您的例子中是图像)的 HTTP header 。

Volley 的工作方式是:

  1. ImageLoader 检查图像的 L1 缓存(您在其构造函数中为 ImageLoader 提供的内存缓存)。如果可用返回图片。
  2. 请求由 RequestQueue 处理。它检查图像的 L2(磁盘缓存)。
  3. 如果在磁盘缓存中找到,请检查图像过期时间。如果没有过期,返回。
  4. 下载图片并返回。
  5. 将图像保存在缓存中。

如果您希望默认设置起作用,图像必须有一个 Cache-Control header ,例如 max-age=???,其中问号表示足够的秒数从下载开始。

如果您想更改默认行为,我不确定,但我认为您必须稍微编辑一下代码。

查看 Volley 源代码中的 CacheDispatcher 类。

关于android - Volley 和位图缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17648497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com