1

ダウンロードアプリケーションに取り組んでおり、複数のスレッドを同時に実行して高速にダウンロードしています。しかし、私はAndroid 4.1ジェリービーンの問題に直面しています.Too many files are open (open failed: EMFILE (Too many open files))の例外を生成します。私が知っているように、1つのプロセスで開く必要があるファイルは1024個だけです。ただし、問題はジェリービーンでのみ発生し、ICS では発生しません。

これらの問題を解決するのを手伝ってくれる人はいますか。ロットのファイルのため、10 スレッド以上でファイルをダウンロードすることが重要です。

任意のアイデアを提案してください。プログラムで解決する。

4

3 に答える 3

1

おそらく httpClient には「バグが多く」あり、非推奨ですが、JellyBean のこの問題は大きな問題です。私はKsoap2を使用しているので、提案されたすべての回答を試しました。

  • System.setProperty("http.keepAlive", "false");
  • httpTransportSE.getServiceConnection().setRequestProperty("接続", "閉じる");
  • httpTransportSE.getServiceConnection().disconnect();

何も機能しませんでした - 私の解決策は、使用している Ksoap2 のバージョンを 3.1.1 から 2.6.5 にロールバックすることでした。2.6.5 を使用すると、この問題は大幅に軽減されます。まだテスト中ですが、おそらく解決することさえあります。

古いバージョンの KSoap2 が機能する理由は、httpUrlConnection ではなく httpClient を使用しているからかもしれません。

于 2014-01-15T02:45:45.933 に答える
1

Linux OS では、プロセスごとに開くファイルの数に厳しい制限があります。その数は、システム レベルのアクセス権があれば構成できますが、Android 経由では構成できません。一度に開くファイルが少なくなるように、アプリケーションを作成する以外に何もする必要はありません。

現実的には、この問題が発生した場合は、ファイル ハンドルがどこかでリークしている可能性があります。開いているすべてのファイルを必ず閉じてください。同時に開いているファイルには制限があります。1 つを閉じると、いつでも新しいファイルを開くことができます。

于 2012-11-14T18:37:06.990 に答える
1

数週間前に Jellybean でのみ同じ問題に遭遇し、最終的に回避策を見つけました。https://stackoverflow.com/a/20417556/976367を参照してください

于 2013-12-17T08:16:10.653 に答える