内部SD卡Android设备上的Errno 24(太多打开文件)错误

时间:2012-10-31 10:44:43

标签: android android-sdcard

我目前正在开发一款很酷的Android应用,可以将多个图像文件分析并交叉在一起。不幸的是,我无法公开更多有关它的信息。

无论如何,我已经在几个设备上测试了它,并且在一些随机情况下达到了太多的打开文件条件(Errno 24)。这发生在具有内部SD卡(如Samsung Galaxy S3)的设备上。在设备生根后,我已经能够识别由于SD卡作为单独的文件系统(称为FUSE的伪文件系统)安装而导致的问题,其中我的应用程序打开的文件实际上是由系统进程/ system / bin打开的/ SD卡/.

这会将设备上的所有进程仅限制为1024个文件描述符(驻留在SD卡上的文件)。 1024个文件描述符限制是Android每个进程的最大打开文件。

例如,安装了100个应用程序的设备,每个打开10个文件(数据库文件,属性等),几乎达到了限制。一旦超过1024个文件的限制,整个设备就没用了 - 应用程序停止工作等等。

★★如果你发现这个令人不安的话,请给你这个公开的问题投票★★ http://code.google.com/p/android/issues/detail?id=39002

1 个答案:

答案 0 :(得分:0)

这确实解释了我和几个Bittorrent客户遇到的问题。文件下载并且似乎存在于外部SD卡上,但它们无法使用,当我强制重新检查下载的数据时,它会显示丢失或损坏的部分。

几个星期以来,我一直在责怪Torrent群体(糟糕的同龄人?),SD卡本身(有缺陷?没有坐着?),还是KitKat(与有点烦人的新限制无关)。

每个torrent打开似乎都会将文件句柄和网络套接字与每个对等关联... 10个种子运行,每个10个对等;没问题。但是10个种子打开了,其中一些可以连接到50个对等体,如果群体很快,而我可怜的小手机必须用力砸到文件手柄天花板上。在我用SD卡做任何其他事情之前就已经开始了!

Android Torrent客户的用户自然会想要使用外置SD卡...... - 大文件 - 单独的文件系统让我觉得使用HTTP服务器将数据传输到任何其他计算机更安全 - 下载Linux发行版并将其直接弹入SD卡插槽!

我设计的解决方法 - 到目前为止似乎工作 - 是将活动的Torrent保留在主存储器中,并在完成写入后将它们传输到SD卡。这样我就可以避免破坏SD卡上显示的数据。 Flud(谷歌播放)不引人注目,可靠,并可选择将完成的Torrent移动到新的位置。