首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >毕加索如何真正缓存图像

问毕加索如何真正缓存图像
EN

Stack Overflow用户
提问于 2014-07-25 09:39:56
回答 2查看 5.7K关注 0票数 9

我想知道毕加索库到底是如何在应用程序中缓存图像的。我知道它使用HttpHeaders来检查天气,从网络中获取图像。

但是,它是否有缓存图像的时间框架?

比如一天后让缓存失效之类的?

问题是我的项目是从网络上加载大量的小图像。有些时候,新的图像会在下一次发布中得到反映。但是,有时候,情况并非如此。

最糟糕的是,一些图像被反映了变化,而另一些则不是,即使是在同一时间的变化。 但是,当我卸载应用程序时,所有的图像都反映了变化(当然是这样)。

在毕加索,一定有一些关于缓存的东西。

请不要告诉我用OkHttp控制毕加索的缓存。

我的项目是使用来自Apache的AsyncHttpClient,它太大了,无法更新。

(当然不是我说的。我只想用UrlConnection创建一个小型网络助手,而不是实现整个AsyncHttpClient。)

无论如何,任何想法或指针都将不胜感激。

底线:没有OkHttp。我只想知道毕加索的缓存控制机制.

问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-25 10:14:03

据我所知,毕加索没有清除缓存本身,因此,在我们的应用程序中,我们是“手动”触发。这样做的代码如下:

代码语言:javascript
复制
private static final String PICASSO_CACHE = "picasso-cache";

public static void clearCache(Context context) {
    final File cache = new File(
            context.getApplicationContext().getCacheDir(),
            PICASSO_CACHE);
    if (cache.exists()) {
        deleteFolder(cache);
    }
}

private static void deleteFolder(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory()) {
        for (File child : fileOrDirectory.listFiles())
            deleteFolder(child);
    }
    fileOrDirectory.delete();
}

根据您在应用程序中需要的内容,您可以每天/每周触发一次此清理工作。

票数 4
EN

Stack Overflow用户

发布于 2014-07-25 16:05:09

毕加索只有一个内存缓存。

如果图像在内存缓存中,它将使用它。否则,当图像从其远程源(网络、内容提供者、文件系统等)加载时。它被放置在内存缓存中,以便将来查找。

内存缓存是一个LRU,所以越多地使用图像,它就越有可能留在缓存中。通常不被要求的图像将随着时间的推移而被逐出。没有时间驱逐,并且内存缓存不符合任何HTTP头的缓存语义(如果图像来自网络)。

Picasso没有磁盘缓存。它100%地依赖于HTTP客户端(不管使用的是哪种)。将自动为OkHttp或HttpUrlConnection (如果两者都使用)安装缓存,或者如果已经使用了缓存,则将使用缓存。

如果您使用的是自定义HTTP客户端,则启用缓存的负担由调用方承担。

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

https://stackoverflow.com/questions/24952627

复制
相关文章

相似问题

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