3
我实现了一个文件缓存来为长网格视图加载小图像。滚动一段时间后,我收到很多libcore.io.ErrnoException: open failed: EMFILE (Too many open files)
android EMFILE(太多打开的文件)
我该如何避免这种情况?这是代码读取一个位图:
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();
只是一个更新:Apache Commons有一个[closeQuietly()](https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/IOUtils.html#closeQuietly(java .io.Closeable))将关闭Closeable并吞下异常的实用程序。我觉得这很有用,即使Apache Commons不可用时,我也会[自己动手](http://www.efalk.org/Docs/Java/techniques.html#Close_Quietly) – 2016-04-05 22:42:06