在LIstView中,延迟加载图像非常慢

时间:2012-12-04 06:13:11

标签: android android-listview android-image performance android-lazyloading

我已经在我的应用程序(推特类应用程序)和提取部分中实现了延迟加载图像(来自远程服务器)并将图像加载到精确的imageView中。但是只有在我向下滚动ListView之后才调用适配器的“getView”部分,因此只有在我向下滚动后才能从远程服务器获取图像(我通过在适配器“getView”代码中执行asyntask来获取图像)看到正在加载的图像有相当多的延迟。一旦图像被加载并存储在内存缓存中,向上或向下滚动就没有问题。唯一的问题是图像加载第一次加载缓慢

有没有办法以这样的方式纠正它,当我向下滚动时,我应该能够获得图像位图,并在向下滚动时设置位图。我希望它与twitter应用程序完全一样,在加载个人资料图片时我看不到延迟。

TIA

3 个答案:

答案 0 :(得分:0)

你的方法不正确你必须在显示它们之前获取所有图像,每次滚动列表时调用get view,这样每次调用服务并获取no。列表可以在屏幕上显示的图像(例如每次4-5个)。

你要做的是: - 1)获取所有图像。 2)当您将所有图像设置适配器提取到listview时,您将在列表中放置所有图像,因为您已经下载了图像,

但这不是延迟加载 - 延迟加载意味着如果用户不滚动,用户只能看到一部分图像,那么从服务中下载图像是没有意义的。

希望有所帮助

答案 1 :(得分:0)

如果您使用getView()方法调用webservice,则每次向上和向下滚动时都会调用它。因为为屏幕上可见的行调用了getView方法。

您可以做的是将图像加载到HashMap<int, Object>,其中int == listview中的位置,object是图像。然后,在getview中,您可以检查是否已加载位置+(1 - > 10),如果没有,则在某种后台任务中从Web服务中检索它们。 将图像加载到hashmap中,并使getView()方法使用这些图像。不是直接从Web服务检索的图像。否则,你确实必须等待它们被检索。这样,您可以在hashmap中缓存图像,而不是在向上和向下滚动时重复检索相同的图像。

当然已经有人制造了这样的适配器,只需在这里搜索它我发现了this所以问题,其答案是指CommonsWare endless adapter

答案 2 :(得分:0)

有一个名为AALP的库,可用于帮助您加载列表视图的延迟。 https://bitbucket.org/zedvoid/aalp/src 这可以为您节省一些时间和精力。