android EMFILE(打开的文件太多)

Posted

技术标签:

【中文标题】android EMFILE(打开的文件太多)【英文标题】:android EMFILE (Too many open files) 【发布时间】:2012-08-14 15:58:10 【问题描述】:

我实现了一个文件缓存来为长网格视图加载小图像。滚动一段时间后,我得到了很多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();

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

只是一个更新:Apache Commons 有一个 closeQuietly() 实用程序,它将关闭 Closeable 并吞下异常。我发现这非常有用,即使 Apache Commons 不可用,我 roll my own

以上是关于android EMFILE(打开的文件太多)的主要内容,如果未能解决你的问题,请参考以下文章

错误:EMFILE:打开的文件太多 - React Native CLI

节点和错误:EMFILE,打开的文件太多

nodejs应用程序中未处理的错误EMFILE

React Native + Jest EMFILE:打开文件过多错误

生产环境中Error:EMFILE,too many open files的解决方案

监视文件更改时出错:EMFILE "code":"EMFILE","errno":"EMFILE","sysc