簡體   English   中英

在Jelly Bean(Android 4.1)中發生錯誤 - >打開失敗:EMFILE(打開文件過多)

[英]In Jelly Bean (Android 4.1) have error occured -> open failed: EMFILE (Too many open files)

我正在開發下載應用程序並同時運行多個線程以便快速下載。 但是我遇到了android 4.1 jelly bean的問題它產生了一個例外,打開太多文件(打開失敗:EMFILE(太多打開的文件))。 據我所知,一個進程可能只有1024個文件應該打開。 但問題只發生在果凍豆而不是ICS上。

有沒有人可以幫助解決這些問題。 由於lot的文件,因此在10個以上的線程中下載文件非常重要。

請提出任何想法。 以編程方式解決。

Linux操作系統上每個進程的打開文件數量有一個硬限制。 如果您具有系統級訪問權限,則該數字是可配置的,但不能通過Android進行配置。 除了編寫應用程序以外,沒有什么可做的,因此一次打開的文件更少。

雖然實際上,如果你遇到這個問題,你可能會在某處泄漏文件句柄。 確保關閉所有打開的文件 - 同時打開文件的限制,如果你關閉一個文件,你總是可以打開一個新的文件取而代之。

我幾周前才在Jellybean遇到同樣的問題,最后找到了解決方法。 請參閱https://stackoverflow.com/a/20417556/976367

也許httpClient“有更多錯誤”並且已被棄用,但JellyBean的這個問題是一個顯而易見的問題。 我正在使用Ksoap2所以我嘗試了所有建議的答案。

  • System.setProperty(“http.keepAlive”,“false”);
  • httpTransportSE.getServiceConnection()。setRequestProperty(“Connection”,“close”);
  • httpTransportSE.getServiceConnection()斷開();

沒有任何效果 - 我的解決方案是將我使用的Ksoap2版本從3.1.1回滾到2.6.5。 使用2.6.5可以大大減少問題。 仍然測試,但甚至可能解決。

可能是舊版KSoap2對我有用的原因是它使用的是httpClient而不是httpUrlConnection。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM