インターネットから画像をダウンロードしてキャッシュディレクトリにキャッシュする小さなコードを書きました。 セカンダリ スレッドで実行されます。
{
String hash = md5(urlString);
File f = new File(m_cacheDir, hash);
if (f.exists())
{
Drawable d = Drawable.createFromPath(f.getAbsolutePath());
return d;
}
try {
InputStream is = download(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
if (drawable != null)
{
FileOutputStream out = new FileOutputStream(f);
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
bitmap.compress(CompressFormat.JPEG, 90, out);
}
return drawable;
} catch (Throwable e) { }
return null;
}
このコードを使用して ListView アイテム内に画像をロードすると、正常に動作します。最初のif(ディスクから画像をロードする場所)を削除すると、スムーズに実行されます(そして毎回画像をダウンロードします!)。そのままにしておくと、リストビューをスクロールすると、ディスクからの画像の読み込み中にラグが発生します。なぜですか?