【发布时间】:2013-08-08 20:25:20
【问题描述】:
读完这篇文章后,我想到了这个问题:Performance tips(特别是名为“异步加载”的部分)。基本上,他正在尝试保存有关一行的信息以查看它是否已被回收,并且仅在该行仍然可见时才设置下载的图像。他就是这样保住位置的:
holder.position = position;
new ThumbnailTask(position, holder)
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
ThumbnailTask 构造函数在哪里:
public ThumbnailTask(int position, ViewHolder holder) {
mPosition = position;
mHolder = holder;
}
在 onPostExecute() 中,他然后进行前面提到的检查:
if (mHolder.position == mPosition) {
mHolder.thumbnail.setImageBitmap(bitmap);
}
我只是不明白这是如何产生任何结果的。 Holder 和 position 在构造函数中同时设置,为相同的值(holder 中的位置与 mPosition 中的位置相同)。它们在 AsyncTask 期间不会发生变化(确实,getView() 中的位置可能会发生变化,但作为私有成员存储在 AsyncTask 中的位置永远不会被操纵)。我在这里错过了什么?
首先,保存位置似乎不是一个好的选择:我相信它不能保证是唯一的,如果我没记错的话,它会在滚动后将自身重置为 0。我的想法是否正确?
【问题讨论】:
标签: android android-listview android-asynctask