在Android上异步下载ListView的图像:为什么这么复杂?

时间:2014-08-12 14:48:38

标签: android listview asynchronous

我想了解在后台异步下载时使用ListView显示图像列表的正确方法是什么。

我已阅读有关此主题的Android tutorial。为了在请求同一个ImageView的多个下载任务时解决并发问题,他们创建了一个新的AsyncDrawable类,它包含对下载任务的弱引用。

每当请求已经下载ImageView上的新下载任务时,现有任务(从AsyncDrawable中提取)将被取消。

问题是:为什么他们不能在不引入新类的情况下使用WeakHashMap<ImageView, Task>为每个ImageView存储一个任务列表而不引入新类?

2 个答案:

答案 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)