我想知道两个中哪一个更好地从web中加载listview中的图像,是通过批量通过一些同时运行的线程还是通过线程队列一个接一个地运行?
我注意到(但我不知道这是否真的是实现)来自youtube应用程序的图像是按批次加载的,而且它有点快。即使不仅要加载图像,还要从网上请求一些数据。有没有人有想法?
答案 0 :(得分:6)
“更好”以哪种方式?表现明智吗?开发者友好?可用性明智吗?
要考虑几个基本的事情:
getView()
的{{1}}中,检查图像是否已经加载,如果没有,则重新使用线程池中的线程来完成工作。答案 1 :(得分:1)
拥有此类功能的最佳方法是让列表中的图像“延迟加载”。如果您的列表具有固定大小,则运行多个线程(每个可见列表项一个),下载图像并刷新列表中的图像。在那个平均时间有一些虚拟图像放在同一位置。
只列出固定数量的图像组件,最好比任何一点的总可见图像多一些。每次滚动列表时,检查对应于该特定列表项的图像是否存在。如果是,请显示。如果没有,则显示虚拟图像,运行线程以在后台加载图像,并在下载完成后刷新列表图像。
为了进一步节省内存,您可以对图像组件使用“SoftReferences”。这允许垃圾收集器带走当前未在屏幕上显示的图像。
答案 2 :(得分:1)
我尝试创建一个可以用作参考的简单惰性列表示例,这里是Lazy load of images in ListView
答案 3 :(得分:1)
https://picard.hgo.se/~jakeri03/blog/?p=39
这可能是您正在寻找的,使用固定的线程池和软缓存来延迟加载图像。