Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 毕加索实际上是如何缓存这些图像的_Android_Picasso_Image Loading - Fatal编程技术网

Android 毕加索实际上是如何缓存这些图像的

Android 毕加索实际上是如何缓存这些图像的,android,picasso,image-loading,Android,Picasso,Image Loading,我想知道毕加索库是如何在应用程序中缓存图像的。我知道它使用HttpHeaders来检查天气,从网络上获取图像 但是,是否存在缓存图像的时间范围像是在一天或其他时间后使缓存失效 问题是我的项目正在从网络上加载大量的小图像。有时,新的图像会在下一次发射中得到反映。但是,有时候,情况并非如此 最糟糕的是,一些图像反映了变化,而另一些图像反映了变化 即使在同一时间进行了更改,也不会显示。但是,当我卸载应用程序时,所有图像都会显示出来 反映了变化(当然) 毕加索的作品中一定有一些关于缓存的东西 请不要告诉

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

但是,是否存在缓存图像的时间范围
像是在一天或其他时间后使缓存失效

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

最糟糕的是,一些图像反映了变化,而另一些图像反映了变化 即使在同一时间进行了更改,也不会显示。但是,当我卸载应用程序时,所有图像都会显示出来 反映了变化(当然)

毕加索的作品中一定有一些关于缓存的东西

请不要告诉我使用OkHttp控制毕加索的缓存。
我的项目使用的是Apache的AsyncHttpClient,它太大了,无法更新
(当然不是我自己。我只是用UrlConnection创建一个小型网络助手,而不是实现整个AsyncHttpClient。)

无论如何,任何想法或建议都将不胜感激。
底线是:没有问题。只想了解毕加索的缓存控制机制。


就我所知,毕加索不会自行清除缓存,因此在我们的应用程序中,我们会“手动”触发缓存。执行此操作的代码如下所示:

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();
}

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

毕加索只有一个内存缓存

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

内存缓存是一个LRU,因此使用的图像越多,它留在缓存中的可能性就越大。不经常请求的图像将随着时间推移被逐出。没有时间逐出,内存缓存也不支持任何HTTP头的缓存语义(如果映像来自网络)

毕加索没有磁盘缓存。它100%依赖于HTTP客户机(以使用的为准)。将自动为OkHttp或HttpUrlConnection(如果使用了其中一个)安装缓存,或者如果已经安装了将要使用的缓存


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

这仅在您使用OkHttp或HttpUrlConnection时起作用,而post明确表示他不这样做。很公平,我们使用的是OkHttp。谢谢Jake。这本身就很清楚。但是,关于“内存缓存不尊重任何HTTP头的缓存语义”,您能再详细一点吗?还有关于“将为OkHttp和HttpUrlConneciton安装缓存”?坦白地说,我根本不想触及AsyncHttpClient机制。我看到毕加索源代码中有一个“缓存”接口,LruCache正在实现这个接口。通过分叉毕加索实现我自己的缓存机制是否明智?如果我实现了我自己的缓存,我可以像下面提到的Ciprian那样在时间范围内设置一个触发器来清除它吗?@JakeWharton,你太棒了,你可能会对我在结尾的括号中的“附加”问题感兴趣。。这对我来说真是个谜。干杯一如既往地感谢你尖叫的粉丝们