1

我正在构建一个小型应用程序,主要是某些企业的目录。一切都是通过 REST 服务获得的。在浏览企业列表时,我在处理图像时遇到了一些问题。

组成每个列表项的图像是一个背景(充当企业的“横幅”)和最多 5 个小图标,代表企业提供的最重要的服务。

我开始使用 Picasso 异步加载这些图像,希望可以避免创建自己的任何缓存。但是,我遇到了几个问题:

A) 最大的问题是在低端手机(运行 Android 2.2 的 LG Optimus V)上,背景/横幅总是无法加载。当背景无法加载时,我正在使用 Picasso 的 error() 选项来加载可绘制的占位符,但是每个都无法加载,我不知道为什么。我注意到的事情:

  • 小图标加载就好了
  • Picasso 的 onImageLoadFailed 回调实际上并未触发。但是我用 error() 指定的占位符确实会加载。
  • 内存似乎不是问题,因为如果它们是本地的而不是远程的,我完全能够加载这些横幅(相同的资产大小)。
  • 在运行 2.3 的 Droid X 和一些更高端的设备中不会发生此问题。

B)在所有设备上,服务图标和横幅似乎都没有缓存到磁盘(Picasso 调试模式表明它们总是首先从远程源加载,然后从内存中加载),即使 Picasso 应该自动执行此操作。不确定我是否缺少某些设置或其他内容。

实际上,如果我可以在应用程序开始时预取服务图标,那将是最好的,因为它们在列表(业务)项目之间重复了很多。它们不能是本地资产,因为可能的服务列表可以随时增加,因此会定期出现更多图标。但是,如果在活动开始时我可以查询我的服务列表(已经有一个 REST 点)并预取所有图标并缓存它们,那就太好了。是否有捷径可寻?

感谢您对这些问题的任何指导。

4

1 回答 1

0

迟到了,但这里是:

A) 原来是 Android 2.2 的错误 SSL 实现的问题。我的图像可以通过 HTTPS 和 HTTP 访问。我使用的是 HTTPS URL,请求失败。我只是切换到 HTTP URL,一切都在 2.2 中开始正常工作

B)我永远无法确切知道这是否真的如此,毕加索的调试模式是否存在错误或什么。在进行更多测试后,我确实注意到应用程序的缓存存储随着时间的推移而增加(即随着更多图像被更频繁地访问),这表明涉及到缓存。但是,我认为它可以是缓存的 HTTP 响应而不是缓存的图像文件,这可以解释为什么 Picasso 的调试模式表明它们是从源请求的,但仍然像缓存一样快速显示。

于 2014-08-03T18:24:32.063 回答