android – 排球和位图缓存

android – 排球和位图缓存,第1张

概述我正在尝试显示包含大量(远程)图像的列表视图.我正试图用凌空来完成任务. 凌空有点奏效,但还不够好.在ImageLoader.get中,volley有以下代码: final String cacheKey = getCacheKey(requestUrl, maxWidth, maxHeight); // Try to look up the request in the cache o 我正在尝试显示包含大量(远程)图像的列表视图.我正试图用凌空来完成任务.

凌空有点奏效,但还不够好.在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会生成如下所示的键:

/** * 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();}

即它向键附加一些“元数据”,如宽度和高度.

此密钥永远不会产生命中,如果图像不在L1缓存中,则会在线获取.当在线获取图像时,它将保存在磁盘缓存中,但Volley会将URL(仅限URL)保存为密钥.

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

解决方法 您没有获得任何匹配的原因是因为Volley中用于磁盘缓存的默认行为取决于您请求的元素的http标头(在您的情况下是图像).

Volley的工作方式是:

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

如果您希望默认设置起作用,图像必须具有Cache-Control标头,如max-age = ???问号表示从下载时起的足够秒数.

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

查看Volley源中的Cachedispatcher类.

总结

以上是内存溢出为你收集整理的android – 排球位图缓存全部内容,希望文章能够帮你解决android – 排球和位图缓存所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存