我正在阅读这篇文章http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/ 以了解我手头的任务的细节。
我必须开始一项任务,从互联网上下载一张我将在每一行显示的图像。
我不明白以下代码如何工作(从我发布的文章链接复制)
public View getView(int position, View convertView,
ViewGroup parent) {
ViewHolder holder;
...
holder.position = position;
new ThumbnailTask(position, holder)
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
return convertView;
}
private static class ThumbnailTask extends AsyncTask {
private int mPosition;
private ViewHolder mHolder;
public ThumbnailTask(int position, ViewHolder holder) {
mPosition = position;
mHolder = holder;
}
@Override
protected Cursor doInBackground(Void... arg0) {
// Download bitmap here
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (mHolder.position == mPosition) {
mHolder.thumbnail.setImageBitmap(bitmap);
}
}
}
private static class ViewHolder {
public ImageView thumbnail;
public int position;
}
现在我不明白的是 onPostExecute 中的 if 条件如何工作?. mHolder.position=mPosition 。在初始化任务时,这两个值都被赋予了任务。如果后面的视图甚至被回收,这对 AsyncTask 中的 mPosition 变量有何影响?该任务已经启动,例如 mPosition 值为 2 。
现在当视图被回收并且位置为 15 时,这将如何反映在以 mPosition = 2 启动的任务中?
请帮忙。
谢谢