读完这篇文章后,我想到了这个问题:性能提示(特别是名为“异步加载”的部分)。基本上,他正在尝试保存有关一行的信息以查看它是否已被回收,并且仅在该行仍然可见时才设置下载的图像。这是他保存位置的方式:
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。我在思考正确的方向吗?