1

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

有没有人可以帮助解决这些问题。由于文件很多,因此在 10 多个线程中下载文件很重要。

请提出任何想法。以程序方式解决。

4

3 回答 3

1

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

  • System.setProperty("http.keepAlive", "false");
  • httpTransportSE.getServiceConnection().setRequestProperty("Connection", "close");
  • httpTransportSE.getServiceConnection().disconnect();

没有任何效果 - 我的解决方案是将我正在使用的 Ksoap2 版本从 3.1.1 回滚到 2.6.5。使用 2.6.5 大大减少了问题。仍在测试,但甚至可能已解决。

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

于 2014-01-15T02:45:45.933 回答
1

几周前我只在 Jellybean 中遇到了同样的问题,终于找到了解决方法。见https://stackoverflow.com/a/20417556/976367

于 2013-12-17T08:16:10.653 回答
1

linux 操作系统上每个进程打开文件的数量有一个硬性限制。如果您具有系统级访问权限,则该数字是可配置的,但不能通过 Android。除了编写您的应用程序之外别无他法,因此一次打开的文件更少。

尽管实际上,如果您遇到此问题,您可能会在某处泄漏文件句柄。确保关闭所有打开的文件——限制是同时打开的文件,如果你关闭一个文件,你总是可以打开一个新文件来代替它。

于 2012-11-14T18:37:06.990 回答