毕加索:从磁盘加载缓存的图像太慢了

时间:2015-03-13 16:13:36

标签: android facebook caching universal-image-loader picasso

所以,我正在开始我的项目,并希望在我的项目中使用Picasso,因为它很受欢迎并被许多项目所使用。 我使用gradle包括picasso并尝试加载facebook个人资料网址。 http://graph.facebook.com/rohitiskul/picture

效果很好。它从网络加载图像没有任何问题。我重新启动了应用程序。(实际上没有杀死进程)。它向我展示了在Memory中即时缓存的相同图像。 但后来,我杀了应用程序(强制停止)并重新启动。加载图像花了将近10秒钟。当我检查调试日志时,该图像是从磁盘加载的。

我的代码看起来像这样 - 在MainActivity中 -

Picasso.with(context)
.load("http://graph.facebook.com/rohitiskul/picture")
.into(imageView);

在应用程序类中 -

Picasso picasso = new Picasso.Builder(this)
.indicatorsEnabled(true).loggingEnabled(true).build()

Picasso.setSingletonInstance(picasso);

有类似问题的人吗?任何解决方案都会有所帮助。

我尝试使用UniversalImageLoader加载相同的Url,从磁盘获取缓存的图像时速度很快。

修改

在使用我的应用程序时,我发现Picasso在设备离线时没有加载磁盘缓存图像。

5 个答案:

答案 0 :(得分:1)

我遇到同样的问题, 但发现第一张图片的速度很慢,以后的图片会很快。

可能需要预热(加载索引缓存)?

答案 1 :(得分:1)

好的,我遇到了你的问题。我已经修好了这个

Picasso.with(context)
       .load("http://graph.facebook.com/rohitiskul/picture")
       .networkPolicy(NetworkPolicy.OFFLINE)
       .into(imageView, new Callback() {
           @Override
           public void onSuccess() { }

           @Override
           public void onError() {
               // Try again online if cache failed
               Picasso.with(context)
                      .load("http://graph.facebook.com/rohitiskul/picture")
                      .into(imageView);
           }
       });

说明:

  1. Picasso将在缓存中查找图片。
  2. 如果只是失败,那么图像将通过网络下载。在你的情况下来自facebook。

答案 2 :(得分:0)

我之前也遇到过这个问题,据我所知,毕加索根据网址中提到的图片名称引用了缓存图片。

在您的情况下,您在网址中没有图片名称,例如' image1.jpg'。由于毕加索发现很难从缓存中读取并且每次都下载图像

您可以尝试在URL中包含图像名称的图像,并且该图像将起作用

答案 3 :(得分:0)

Picasso并不提供开箱即用的磁盘缓存。相反,它依赖于Http Cache。

确保将OkHttp添加到依赖项列表中。

答案 4 :(得分:0)

发出请求时,使用stableKey方法添加字符串标识符,以便Picasso可以识别您的请求并快速从缓存中加载它。

示例:

Picasso.Builder(context).loggingEnabled(true).build()
                .load(imageUrl)
                .stableKey("myImage")
                .into(imageView)