哪个更好的加载ListView的图像?

我想知道在Web上的ListView加载图像是两个哪个更好,是通过一些线程同时运行或通过线程队列一个接一个的批量?

我已经注意到了(但是我不知道这是否是真正的实现),从图像批量加载的YouTubevideo应用程序,它有点快。 即使不仅加载图像,而且还要求networking上的一些数据。 有没有人有一个想法?

Solutions Collecting From Web of "哪个更好的加载ListView的图像?"

“更好”以哪种方式? 性能明智吗? 开发者友好? 可用性明智吗?

一些基本的事情要考虑:

  1. 创build线程很昂贵。 这很慢,每个线程都占用系统资源(当然)。 为每个下载创build单个线程时,请使用受pipe理的上限线程池。
  2. 如果用户不可见,则不要加载图像。 你应该做的是在你的ListAdapter getView()中,检查图像是否已经被加载,如果没有,重新使用线程池中的线程来完成工作。
  3. 小心AsyncTask。 据我所知,AsyncTaskpipe理一个固定的,应用程序范围的线程池(我认为它被限制为5个线程),所以如果所有这些线程正在忙于加载映像,那么通过该类执行的任何其他任务都将被阻塞。
  4. 不要重新发明轮子。 Droid-Fu的ImageLoader能解决你的问题吗? 它也实现了caching,所以图像不会下载两次。

具有这种function的最好方法是在列表中将图像“延迟加载”。 如果列表的大小是固定的,则运行多个线程(每个可见列表项目一个),下载图像并刷新列表中的图像。 在此期间有一些虚拟形象放置在同一地点。

只有一个固定数量的图像组件为您列出,最好是在任何点上的总可见图像多一些。 每次滚动列表时,检查与特定列表项目对应的图像是否存在。 如果是,则显示。 如果没有,则显示虚拟映像,运行线程在后台加载映像,并在下载完成后刷新列表映像。

为了进一步保存内存,可以使用“SoftReferences”作为图像组件。 这样垃圾收集器就可以拿走目前屏幕上没有显示的图像。

我试图创build一个简单的懒惰列表的例子,可以作为参考,这里是在ListView中图像的懒加载

https://picard.hgo.se/~jakeri03/blog/?p=39

这可能是你正在寻找的,使用一个固定的线程池和一个软caching来延迟图像。