【问题标题】:Picasso: Loading cached image from disk too much slowPicasso:从磁盘加载缓存的图像太慢了
【发布时间】:2015-05-16 05:16:33
【问题描述】:

所以,我开始了我的项目并想在我的项目中使用毕加索,因为它很受欢迎并且被许多项目使用。 我使用 gradle 包含了毕加索,并尝试使用它加载 facebook 个人资料网址。 http://graph.facebook.com/rohitiskul/picture.

效果很好。它从网络加载图像没有任何问题。我重新启动了应用程序。(实际上没有杀死进程)。它向我展示了立即缓存在内存中的相同图像。 但后来,我杀死了应用程序(强制停止)并重新启动。加载图像花了将近 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 在设备离线时没有加载磁盘缓存的图像。

【问题讨论】:

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


    【解决方案1】:

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

    例子:

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

    【讨论】:

      【解决方案2】:

      好的,我有你的问题。我已经通过这样做修复了它

      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。

      【讨论】:

      • 对我帮助很大,因为我正在为我的女朋友制作一个离线应用程序。主要是我没有将应用程序连接到网络。只是为了收集数据。大 tnx!
      【解决方案3】:

      我遇到了同样的问题, 但发现只有第一张图片很慢,后面的图片会很快。

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

      【讨论】:

      • 对此我不太确定。但也可能是我的看法。 :)
      【解决方案4】:

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

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

      【讨论】:

      • 它已经存在于我的依赖项中。这就是毕加索从磁盘返回缓存图像的原因。问题是操作太慢并且以某种方式依赖网络
      【解决方案5】:

      这个问题我之前也遇到过,据我所知,毕加索是根据 URL 中提到的图像名称来引用缓存的图像。

      在您的情况下,您的 URL 中没有图像名称,例如“image1.jpg”。由于毕加索发现很难从缓存中读取,它每次都下载图像

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

      【讨论】:

      • 这似乎是完美的点,但是当我离线并打开应用程序时,它甚至没有显示磁盘缓存的图像
      • 我不确定为什么会发生这种情况。你在处理清除缓存吗?
      • 我的应用程序中只有一行我在 OP 中声明过,没有别的。无需处理,无需配置..
      • 理想情况下不应该发生这种情况
      猜你喜欢
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 2014-04-25
      相关资源
      最近更新 更多