繁体   English   中英

毕加索-将图像保存在磁盘上

[英]Picasso - keeping images on disk

我正在使用Picasso在我的应用程序中下载图像。 我的理解是,它使用http客户端(HttpResponseCache或OkHttpClient)将这些图像缓存在磁盘上。

在不了解这两个库中的任何一个的情况下,是否可以将某些图像标记为永久图像? 换句话说,我想下载图像并保证它可以脱机使用。

考虑一下,我真的无法使磁盘缓存超过一定大小,所以我想我真正需要的是删除图像URL上的TTL,并允许缓存在先进先出的情况下删除图像。

在那种情况下,我可以控制首先删除哪个图像(通过使用基于访问而不是下载的时间戳)吗?

更新

根据这个SO问题的答案:

Android + Picasso:更改URL缓存过期

因此,这回答了问题的第一部分-我们可以通过服务器控制TTL。

与同事交谈后,他指出,http客户端应考虑访问图像的频率(除了TTL)。 因此,希望我也不必为此担心。

这给我一个问题。 我知道我不再需要哪些映像,可以从磁盘缓存中删除映像吗?

您可以迭代OkHttp的磁盘缓存中的元素,然后调用Iterator.remove()摆脱不需要的元素。

http://square.github.io/okhttp/javadoc/com/squareup/okhttp/Cache.html#urls--

您必须扩展Picasso的默认缓存并创建一个自定义Picasso实例才能使用它:

  1. 扩展LruCache
  2. 重写void set(String key, Bitmap bitmap)方法以执行您描述的操作(添加时间戳等)。 在此处查看原始源代码。
  3. 确保原始的trimToSize方法永远不会被set (以及该事件的clearKeyUri )调用,并编写自己的代码以检查时间戳等以获取您描述的行为
  4. 使用您的自定义缓存创建一个自定义Picasso实例,如下所示:

Picasso picasso = new Picasso.Builder(context).memoryCache(cache).build(); Picasso.setSingletonInstance(picasso);

cache是您的自定义LruCache类的实例

当您要将图像存储在磁盘上时,应使用okhttpdownloader

OkHttpClient client = new OkHttpClient.Builder()
                .cache(new Cache(getCacheDir(), Integer.MAX_VALUE))
                .build();
        Picasso build = new Picasso.Builder(this)
                .downloader(new OkHttp3Downloader(client))
                .build();
        Picasso.setSingletonInstance(build);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM