android EMFILE(打开的文件太多)

标签 android file

我实现了一个文件缓存来为长 GridView 加载小图像。滚动一段时间后,我得到了很多 libcore.io.ErrnoException: open failed: EMFILE (Too many open files)

如何避免这种情况?这是读取一个位图的代码:

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());

这是保存一张位图:

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

最佳答案

您的 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()
  }
}

我看不出第一个代码 fragment 有任何明显的错误。

关于android EMFILE(打开的文件太多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11956256/

相关文章:

c++ - 如何在 Windows 中确定文件的创建日期?

javascript - 是否可以上传字符串/js 对象而不将其存储在文件中? - IPFS

android - 我发布的 Android 应用程序无法安装到来自 Android 市场的设备上

android - 如何在 Android Studio 项目中包含库模块依赖项?

android - 查看由 android 应用程序创建的私有(private)文件

javascript - Android 和 iOS Webview 中 html 和 javascript 文件的安全性

java - 当我输入错误的用户名或密码时,它只是说**请输入用户名和密码**

c++ - CodeEval 挑战 : Reverse strings in input file

android - 无法识别 WhatsApp 联系人

java - 当滑动到布局刷新 fragment 中的布局时如何禁用后按