この質問は、これを読んだ後に私に来ました:パフォーマンスのヒント(具体的には「非同期読み込み」という名前の部分)。基本的に、彼は行に関する情報を保存して、まだリサイクルされているかどうかを確認し、行がまだ表示されている場合にのみダウンロードした画像を設定しようとしています。これは彼がポジションを保存する方法です:
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);
}
これがどのように結果をもたらすかわかりません。ホルダーと位置はコンストラクターで同時に同じ値に設定されます (ホルダー内の位置は mPosition 内の位置と同じです)。それらは AsyncTask 中に変更されません (getView() で位置が変更される可能性があるのは事実ですが、プライベート メンバーとして AsyncTask に格納されているものは操作されません)。ここで何が欠けていますか?
また、位置を保存することは、そもそも良い選択肢のようには思えません。一意であることが保証されていないと思います。正しく思い出せば、スクロール後に0にリセットされます。私は正しい方向に考えていますか?