将数据从Web服务加载到列表视图的最佳方法

时间:2012-04-10 23:03:07

标签: android lazy-loading

我正在制作一个适配器,它强调来自Web服务的数据加载,每次用户向下滚动时,它都会加载更多数据并将其添加到该适配器后面的ArrayList。数据包含图像URL,然后我在我的getView方法中延迟加载。

  • 有更好的解决方案吗?
  • 我如何正确缓存这些图像?
  • 当用户旋转设备时,我可以保留适配器的数据吗?所以不需要从头开始重新加载它们吗?

我使用片段显示该列表?

1 个答案:

答案 0 :(得分:2)

我会尝试逐一回答所有三个问题。

有没有更好的解决方案? (除了延迟加载)

这取决于。关于延迟加载的好处是,当您显示组件时,您不需要在开始时拥有所有数据。问题通常是,如何在需要时获取新数据。

因此,当从网络加载新数据时,实际上是加载数据的块数有多大的问题。我不会在下一个之后加载一个新条目,但加载例如当列表结束时,有20个新的。

当然,对于一个数字来说,这只是一个随意的想法,你需要找到速度和可用性之间的完美点。

因此,当您从Web服务加载大量数据时,这些数据传输速度足够快,这真的是一个很酷的概念。但是如果你只是一个接一个地读一个条目(因此,用户几乎总是等待新数据),这真的很烦人。

如何正确缓存图片?

有多种可能的解决方案,其中一些是:

  • Using the system-cache,就像浏览器一样(似乎是 上等)。
  • 实施您自己的使用设备存储的系统(例如 SD卡或内部应用程序存储(第一个是 优选的))。

您可能也喜欢this question的内容(以及它已接受的答案),为您提供有关内存管理的一般建议。

我可以在用户旋转设备时保留适配器的数据吗?

旧,已弃用 anser:

  

是的,您可以使用Activity的“实例状态”来执行此操作。   基本上,来自Activity的onSaveInstanceState()-method   允许您使用状态信息填充给定的Bundle   然后传递给onCreate()-method

     

您在Bundle中保存的数据将是(例如)   列表的当前位置或甚至列表本身(取决于   在大小上。)

是的,请使用Loaders API。它也可以在兼容性库中找到。