我目前正在使用 Volley Image Loader 在我的应用程序中加载和缓存图像。缓存工作正常,但我看到当我尝试将相同的网络图像加载到不同大小的 ImageView 时,缓存不会被命中。我相信这是因为 ImageLoader 中的 getCacheKey 将位图的大小附加到 key :
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();
}
我如何保存 Volley 正在下载的图像并将其用于我需要的所有不同尺寸,而不是必须对同一图像但尺寸不同的另一个网络请求?
谢谢
最佳答案
看起来如果您在不使用 NetworkedImageView 的情况下加载图像,那么加载的图像将是完整图像。因此,我没有使用 NetworkedImageView,而是像这样加载图像:
getImageLoader().get(url, new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer imageContainer, boolean b) {
((ImageView)view).setLocalImageBitmap(imageContainer.getBitmap());
}
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
这将加载带有#W0#H0 键的图像。这会降低一些速度,因为 ImageView 必须执行调整图像大小的工作,但现在我们不必为同一图像发出网络请求。
关于Android Volley 图像缓存不同大小的位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30904393/