Volley:图像缓存

7

我刚开始使用Volley和缓存:P。虽然我已经阅读了许多与Volley图片缓存相关的文章和帖子,但我仍然不清楚使用Volley进行图片缓存的最佳/首选方式。像磁盘缓存还是内存缓存?Volley已提供哪些支持以及如何(与L1和L2缓存支持相关)?

在我的情况下,我使用NetworkImageView来填充从网络获取的图像列表视图。

提前致谢!


我也对这个链接感到困惑:https://dev59.com/QGQn5IYBdhLWcg3woIYF#16897129。其中提到“Volley在其自己的L2缓存中隐式处理基于磁盘的缓存。图像缓存只是L1缓存”。 - arorak
1个回答

15
对于图像缓存,volley希望您提供一个实现图片内存缓存的方案。在应用程序运行期间,可以使用此缓存来加快加载时间。

与图片无关,Volley拥有自己的磁盘缓存,用于缓存每个响应,默认缓存策略根据HTTP响应缓存标头进行缓存。

如果您在应用程序中加载的图像具有缓存标头,它们将按照这些标头缓存在磁盘上,否则将不会被缓存。

如果您不满意这种策略并想要强制缓存到磁盘,则需要编辑/添加一些代码以更改缓存策略。有许多方法可以实现这一点,其中之一是提供自己的实现来解析HTTP标头。请查看Volley源代码中的HttpHeaderParser

谢谢Itai!就像你说的那样,我不确定我或任何使用此功能的用户是否有缓存头文件。因此,我正在尝试仅强制进行磁盘缓存,为此我参考了:https://github.com/JakeWharton/DiskLruCache 但我不确定这是否是一个好方法,还是可能有其他更好的方法。另外,我不清楚我是否可以在这里使用volley的DiskBasedCache - arorak
1
请注意:在ImageLoader构造函数中期望使用内存缓存时,不要错误地使用磁盘缓存。如果您想强制缓存,您必须确切地这样做-编辑Volley源代码以解析每个HTTP标头,就好像它具有缓存标头一样,或更改对缓存条目的检查。此外,如果我的答案有所帮助,我将感激您接受它,谢谢。 - Itai Hanski
好的。实际上我没有意识到ImageLoader中需要一个内存缓存。我错过了这个参考,它说传递的缓存应该是“用作L1缓存的缓存”。而L1显然应该是内存缓存(如果我错了,请纠正我;-))。 - arorak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接