首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存策略:如果在LimitedAgeMemoryCache中加载,则从web加载。失败时回到UnlimitedDiscCache

缓存策略:如果在LimitedAgeMemoryCache中加载,则从web加载。失败时回到UnlimitedDiscCache
EN

Stack Overflow用户
提问于 2013-03-25 07:31:10
回答 1查看 843关注 0票数 0

可以这样做吗?

我的场景是天气图与URL保持不变,而底层图像实际上是变化的。下面是我想要介绍的案例:-在我的应用程序的同一个会话中(通常是2-5分钟),我从来不想从网络上重新加载图像--大约15分钟后,图像可能已经改变了,因此即使我有缓存的版本,我也想转储它。-当尝试在脱机时重新加载图像时,任何图像(包括旧图像)都比没有图像要好,所以我想从磁盘缓存中显示它。

这是可能的吗?对于UIL来说,它是否可行似乎并不是立即显而易见的。

感谢伟大的图书馆!

EN

回答 1

Stack Overflow用户

发布于 2013-03-25 08:17:21

我认为这是你的解决方案:

代码语言:javascript
复制
File cacheDir = StorageUtils.getCacheDirectory(context); // or any other folder
MemoryCacheAware<String, Bitmap> memoryCacheCore 
          = new LruMemoryCache(4 * 1024 * 1024); // or any other implementation

MemoryCacheAware<String, Bitmap> memoryCache 
          = new LimitedAgeMemoryCache<String, Bitmap>(memoryCacheCore, 15 * 60);
DiscCacheAware discCache = new LimitedAgeDiscCache(cacheDir, 15 * 60);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
        .memoryCache(memoryCache)
        .discCache(discCache)
        ...
        .build();

UPD: UIL总是首先在内存缓存中搜索所需的图像。然后UIL在磁盘缓存中搜索它。然后从网络下载图像。

如果您使用“有限年龄”内存缓存或磁盘缓存,则位图或图像文件将在超时后从缓存中删除(实际上,它们将在缓存中搜索期间被删除)。逻辑如下:

  1. 在内存缓存中搜索位图
    • 需要的位图有吗?
      • 在之前,向缓存中添加了比指定时间更多的位图
        • 从内存缓存中删除它,转到步骤2

代码语言:javascript
复制
    - bitmap was added to cache recently 
        - get the bitmap, display it. End.

代码语言:javascript
复制
- no needed bitmap in cache, go to step 2

  1. 在磁盘缓存中搜索图像文件
    • 需要的图像有吗?
      • 图像添加到缓存中的时间超过了指定的时间。
        • 从光盘缓存中删除它,转到步骤3

代码语言:javascript
复制
    - image was added to cache recently 
        - decode image to bitmap, display it. End.

代码语言:javascript
复制
- no needed image in cache, go to step 3

  1. 下载图像

不要忘记启用缓存(在显示选项中,DisplayImageOptions)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15609749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档