0

是否可以做到以上几点?

我的场景是天气图形,其 URL 保持不变,而底层图像实际上发生了变化。以下是我想介绍的情况: - 在我的应用程序的同一会话中(通常 2-5 分钟),我不想从网络重新加载图像 - 大约 15 分钟后,图像可能已经改变,因此甚至如果我有缓存版本,我想转储它。- 当尝试在离线时重新加载图像时,任何图像(包括旧图像)都比没有图像好,所以我想从磁盘缓存中显示它。

这种设置可以吗?如果它对 UIL 可行,这似乎不是很明显。

感谢伟大的图书馆!

4

1 回答 1

2

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

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
      • 位图最近被添加到缓存中
        • 获取位图,显示它。结尾。
    • 缓存中不需要位图,转到步骤 2
  2. 在磁盘缓存中搜索图像文件
    • 需要的图像在那里
      • 图像被添加到缓存中的时间超过了指定时间
        • 从磁盘缓存中删除它,转到步骤 3
      • 图像最近被添加到缓存
        • 将图像解码为位图,显示它。结尾。
    • 缓存中不需要图像,转到步骤 3
  3. 下载图片

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

于 2013-03-25T08:17:21.450 回答