【发布时间】:2012-04-23 06:29:31
【问题描述】:
我正在制作一个适配器,它强调从 Web 服务加载的数据,每次用户向下滚动时,它都会加载更多数据并将其添加到该适配器后面的 ArrayList 中。数据包含图像 URL,然后我在 getView 方法中延迟加载。
- 有没有更好的解决方案?
- 如何正确缓存这些图像?
- 当用户旋转设备时,我可以保留适配器的数据吗?所以不需要从头开始重新加载它们?
我使用片段来显示该列表?
【问题讨论】:
标签: android lazy-loading
我正在制作一个适配器,它强调从 Web 服务加载的数据,每次用户向下滚动时,它都会加载更多数据并将其添加到该适配器后面的 ArrayList 中。数据包含图像 URL,然后我在 getView 方法中延迟加载。
我使用片段来显示该列表?
【问题讨论】:
标签: android lazy-loading
我将尝试一一回答所有三个问题。
有没有更好的解决方案? (除了延迟加载)
这取决于。延迟加载的好处是,当您显示组件时,您不需要一开始就拥有所有数据。问题通常是,如何根据需要获取新数据。
因此,当从网络加载新数据时,实际上是加载数据块有多大的问题。我不会在下一个条目之后加载一个新条目,而是加载例如20 个新的,当到达列表末尾时。
当然,这只是一个数字的随机想法,您需要为您的案例找到速度和可用性之间的完美点。
因此,当您从 Web 服务加载数据块时,这些数据交付速度足够快,这确实是一个很酷的概念。但是,如果您只是一个接一个地阅读条目(因此,用户几乎总是等待新数据),这真的很烦人。
以及如何正确缓存图片?
有多种可能的解决方案,其中一些是:
您可能还喜欢this question 的内容(这是公认的答案),为您提供有关内存管理的一些一般性建议。
当用户旋转设备时,我可以保留适配器的数据吗?
旧的,已弃用分析器:
是的,您可以使用 Activity 的“实例状态”来执行此操作。 基本上,来自活动的onSaveInstanceState()-method 允许您使用状态信息填充给定的Bundle,其中 然后传递给onCreate()-method。您将保存在
Bundle中的数据将是(例如) 列表的当前位置,甚至可能是列表本身(取决于 大小)。
是的,使用Loaders API。它也可以在兼容性库中找到。
【讨论】: