画像を表示しているリストビューが表示されました。これらの画像はダウンロードされ、適切にキャッシュされます。リストを下にスクロールして新しいアイテムをロードするときに、最も使用頻度の低いアイテムをリサイクルしてメモリを節約したいと思います。画面に表示されていないビットマップにLRUマップとim呼び出しリサイクルを正常に実装しました。コードの一部は次のとおりです。
imageViewはViewGroupです
public void recycleImage(int res) {
if (imageView != null) {
imageView.setBackgroundDrawable(null);
if (res > 0)
imageView.setBackgroundResource(res);
}
if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
Log.i(TAG, "Bitmap recycled");
}
}
これらの値は、アダプターのgetViewメソッドに保存されます。問題は、画像をリサイクルすると、画面に表示されている画像も失われることを確認できることです(画面の外にあることがわかっている画像のみをリサイクルすることに注意してください)。
リストビューで他の人のビットマップをリサイクルしたときに、現在表示されている画像が失われる理由を誰かが知っていますか?
ここで、保存されているビットマップにアクセスしたり、ダウンロードしたりします。
if (mImageMap.containsKey(url)) {
ImageCacheModel cache = mImageMap.get(url);
return cache.getBitmap();
} else if (cacheManager.isUrlCached(url)) {
mImageMap.put(url, new ImageCacheModel(imageView, cacheManager.getCachedBitmapOrNull(url, 2)));
ImageCacheModel cache = mImageMap.get(url);
return cache.getBitmap();
} else {
cacheManager.addUrlToQueue(url, this, true);
}