私はこの記事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 で開始されたタスクにどのように反映されるでしょうか?
助けてください。
ありがとう