我想了解在后台异步下载时使用ListView显示图像列表的正确方法是什么。
我已阅读有关此主题的Android tutorial。为了在请求同一个ImageView的多个下载任务时解决并发问题,他们创建了一个新的AsyncDrawable
类,它包含对下载任务的弱引用。
每当请求已经下载ImageView上的新下载任务时,现有任务(从AsyncDrawable中提取)将被取消。
问题是:为什么他们不能在不引入新类的情况下使用WeakHashMap<ImageView, Task>
为每个ImageView存储一个任务列表而不引入新类?
答案 0 :(得分:2)
为什么不能在不引入新类的情况下使用WeakHashMap为每个ImageView存储一个任务列表而不引入新类?
使用AsyncDrawable的教程背后的意图似乎是基于分离关注或类似的原则。
基本上,您会分解应用程序组件,因此它们不会相互引用。
在示例中,您将获得类似此层次结构的内容:
Activity -> ListView -> Adapter -> Row -> ImageView -> AsyncDrawable <-> Task
现在您不需要在不同的地方管理那个drawable。使用哈希映射,你会得到更像这样的东西。
Activity -> ListView -> Adapter -> Row -> ImageView(1) -> Drawable <- Task(2)
-> HashMap<ImageView(1), Task(2)>
并非一下子,您的层次结构是非线性的。随着时间的推移它变得不那么易于维护,如果你改变了图像视图的显示方式,现在你必须在几个不同的地方更改你的代码,而不是仅仅改变Drawable。
答案 1 :(得分:0)
您可以尝试使用Android-Universal-Image-Loader
lib异步下载图像/图像加载
试试这个lib和例子。
https://github.com/nostra13/Android-Universal-Image-Loader
教程
http://javatechig.com/android/universal-image-loader-android-library
希望这可能有用......