Java 在Jelly Bean(Android 4.1)中发生错误->;打开失败:EMFILE(打开的文件太多)

Java 在Jelly Bean(Android 4.1)中发生错误->;打开失败:EMFILE(打开的文件太多),java,android,linux,Java,Android,Linux,我正在开发一个下载应用程序,同时运行多个线程以快速下载。但是我面临着android 4.1 jelly bean的一个问题,它产生了一个异常,即打开的文件太多(打开失败:EMFILE(打开的文件太多))。正如我所知,一个进程只能打开1024个文件。但问题只发生在果冻豆上,而不是ICS上 是否有任何人可以帮助解决这些问题。因为这是重要的下载文件在超过10线程由于地段的文件 请提出任何意见。在linux操作系统上,每个进程打开的文件数有一个硬限制。如果您具有系统级访问权限,则可以配置该号码,但不能通

我正在开发一个下载应用程序,同时运行多个线程以快速下载。但是我面临着android 4.1 jelly bean的一个问题,它产生了一个异常,即打开的文件太多(打开失败:EMFILE(打开的文件太多))。正如我所知,一个进程只能打开1024个文件。但问题只发生在果冻豆上,而不是ICS上

是否有任何人可以帮助解决这些问题。因为这是重要的下载文件在超过10线程由于地段的文件


请提出任何意见。在linux操作系统上,每个进程打开的文件数有一个硬限制。如果您具有系统级访问权限,则可以配置该号码,但不能通过Android。除了编写应用程序,没有什么可做的,所以一次打开的文件就更少了


尽管事实上,如果您遇到这个问题,您可能在某个地方泄漏了文件句柄。确保关闭所有打开的文件-限制是同时打开的文件,如果关闭一个文件,则始终可以打开一个新文件来代替它。

我几周前在Jellybean中遇到了同样的问题,最后找到了解决方法。请参见

也许httpClient“有更多的bug”并且已被弃用,但JellyBean的这个问题是一个障碍。我正在使用Ksoap2,所以我尝试了所有建议的答案

  • set属性(“http.keepAlive”、“false”)
  • httpTransportSE.getServiceConnection().setRequestProperty(“连接”,“关闭”)
  • httpTransportSE.getServiceConnection().disconnect()
没有任何效果-我的解决方案是将我正在使用的Ksoap2版本从3.1.1回滚到2.6.5。使用2.6.5,问题大大减少。仍在测试,但可能已经解决


可能是老版本的KSoap2对我有效的原因是它使用的是httpClient而不是httpUrlConnection。

是一个关于关闭
OutputStream
s的可靠方法的好资源。你的问题可能与不关闭东西有关。你能找到解决办法吗?我遇到了与果冻豆相同的问题。事实上,对于Jellybean的所有版本(4.1到4.3)。姜饼、ICS和Kitkat中不存在该问题。