我想知道毕加索库到底是如何在应用程序中缓存图像的。我知道它使用HttpHeaders来检查天气,从网络中获取图像。
但是,它是否有缓存图像的时间框架?
比如一天后让缓存失效之类的?
问题是我的项目是从网络上加载大量的小图像。有些时候,新的图像会在下一次发布中得到反映。但是,有时候,情况并非如此。
最糟糕的是,一些图像被反映了变化,而另一些则不是,即使是在同一时间的变化。 但是,当我卸载应用程序时,所有的图像都反映了变化(当然是这样)。
在毕加索,一定有一些关于缓存的东西。
请不要告诉我用OkHttp控制毕加索的缓存。
我的项目是使用来自Apache的AsyncHttpClient,它太大了,无法更新。
(当然不是我说的。我只想用UrlConnection创建一个小型网络助手,而不是实现整个AsyncHttpClient。)
无论如何,任何想法或指针都将不胜感激。
底线:没有OkHttp。我只想知道毕加索的缓存控制机制.
问候
发布于 2014-07-25 10:14:03
据我所知,毕加索没有清除缓存本身,因此,在我们的应用程序中,我们是“手动”触发。这样做的代码如下:
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();
}根据您在应用程序中需要的内容,您可以每天/每周触发一次此清理工作。
发布于 2014-07-25 16:05:09
毕加索只有一个内存缓存。
如果图像在内存缓存中,它将使用它。否则,当图像从其远程源(网络、内容提供者、文件系统等)加载时。它被放置在内存缓存中,以便将来查找。
内存缓存是一个LRU,所以越多地使用图像,它就越有可能留在缓存中。通常不被要求的图像将随着时间的推移而被逐出。没有时间驱逐,并且内存缓存不符合任何HTTP头的缓存语义(如果图像来自网络)。
Picasso没有磁盘缓存。它100%地依赖于HTTP客户端(不管使用的是哪种)。将自动为OkHttp或HttpUrlConnection (如果两者都使用)安装缓存,或者如果已经使用了缓存,则将使用缓存。
如果您使用的是自定义HTTP客户端,则启用缓存的负担由调用方承担。
https://stackoverflow.com/questions/24952627
复制相似问题