2

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

无论如何,我已经在多台设备上对其进行了测试,并且在某些随机情况下达到了打开文件过多的情况(Errno 24)。这发生在具有内部 SD 卡的设备(如三星 Galaxy S3)上。生根设备后,我已经能够确定由于 sdcard 被挂载为单独的文件系统(称为 FUSE 的伪文件系统)而导致的问题,其中我的应用程序打开的文件实际上是由系统进程 /system/bin 打开的/SD卡/。

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

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

★★ 如果你和我一样觉得这很麻烦,请给这个未决问题投票 ★★ http://code.google.com/p/android/issues/detail?id=39002

4

1 回答 1

0

这确实解释了我在使用几个 Bittorrent 客户端时遇到的问题。文件下载并出现在外部 SD 卡上,但它们不可用,当我强制重新检查下载的数据时,它显示丢失或损坏的部分。

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

每个打开的 torrent 似乎都将一个文件句柄和一个网络套接字与每个对等点相关联...... 10 个种子运行,每个 10 个对等点;没问题。但是打开了 10 个种子,如果 swarm 速度很快,其中一些可能会连接到 50 个对等点,而且我那可怜的小手机肯定撞到了文件句柄天花板上。那是在我对 SD 卡做任何其他事情之前!

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

我设计的解决方法 - 到目前为止似乎有效 - 将活动的 Torrent 保留在主存储中,并在完成写入后将它们转移到 SD 卡。这样可以避免损坏 SD 卡上显示的数据。Flud (Google Play) 不显眼、可靠,并且可以选择将已完成的 Torrent 移动到新位置。

于 2016-01-23T19:42:31.290 回答