3

長いグリッド ビュー用に小さな画像を読み込むファイル キャッシュを実装しました。しばらくスクロールすると、たくさん出てきますlibcore.io.ErrnoException: open failed: EMFILE (Too many open files)

どうすればこれを回避できますか? これは、1 つのビットマップを読み取るコードです。

File fullCacheDir = new File(Environment.getExternalStorageDirectory().toString(), cacheDir);
File file = new File(fullCacheDir.toString(), fileName);

if (!file.exists()) {
    return null;
}

Bitmap bm = BitmapFactory.decodeFile(file.toString());

これは、1 つのビットマップを保存するためのものです。

FileOutputStream outputStream = new FileOutputStream(fileUri);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();
4

1 に答える 1

6

例外が原因で close() 呼び出しに到達しない可能性はありますか? 私は通常、次のようにコーディングします。

try {
  new FileOutputStream(fileUri);
  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
  outputStream.flush();
} finally {
  try {
    outputStream.close();
  } catch (Exception ignored) {
    // ignore exceptions generated by close()
  }
}

最初のコード フラグメントに明らかな問題は見られませんでした。

于 2012-08-14T18:08:32.877 に答える