私は Android 開発者の Web サイトを調べて、いくつかの記事を読んでいます。AsyncTask を使用して、リスト ビューで画像の読み込みを遅らせる 1 つの方法があります。
// Using an AsyncTask to load the slow images in a background thread
new AsyncTask<ViewHolder, Void, Bitmap>() {
private ViewHolder v;
@Override
protected Bitmap doInBackground(ViewHolder... params) {
v = params[0];
return mFakeImageLoader.getImage();
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (v.position == position) {
// If this item hasn't been recycled already, hide the
// progress and set and show the image
v.progress.setVisibility(View.GONE);
v.icon.setVisibility(View.VISIBLE);
v.icon.setImageBitmap(result);
}
}
}.execute(holder);
ただし、私には、そのコードには少し問題があるようです。たとえば、インターネットから画像を読み込み、読み込みに数秒かかるとします。
ユーザーとして、リストをスクロールしてから別のアクティビティに切り替えると、バックグラウンドで実行されているいくつかの AsyncTasks があり、帯域幅を消費しますが、新しいフォアグラウンド アクティビティで必要になる可能性があります。
彼らのアプローチを使用して、通常、そのケースをどのように処理しますか? ビューをリサイクルするときに、ホルダーに関連付けられている AsyncTask を強制終了しますか? どの AsyncTasks がまだ実行されているかをアダプターで追跡し、アクティビティーが停止したときにそれらをすべてキャンセルしますか? それを行う他の方法はありますか?
私の質問は主に、その問題を解決するために部品をクリーニングするアーキテクチャについてです (実装ではありません)。