2012-04-14 67 views
0

我實現了一個小的Android應用程序,通過REST API從服務器接收數據。每個活動都包含一個從服務器獲取請求數據的AsyncTask。我在ThreadSafeConnManager中使用了DefaultHttpClient,並且客戶端是一個單例以重用它。 當我測試應用程序,並且我正在通過活動時,出現了一個奇怪的問題:一切工作一段時間,突然接收數據需要的時間越來越長。如果我在活動中快速回擊按鈕,會發生這種情況 - 我懷疑由於異步客戶端連接沒有釋放,並且新任務無法連接。但是,如果我爲每個HttpGet創建一個新的客戶端實例,情況也會如此。Android DefaultHttpClient REST api

我堅持了這個問題,不知道什麼是錯的。任何幫助讚賞。

感謝,並BR彼得

回答

0

AsyncTasks得到棘手的一種,尤其是長時間運行的操作。 聽起來像你可能有幾個任務試圖填補你的請求。請記住,在這個過程中,您的客戶會在某個時間阻止。

我建議你從asyncTasks和螺紋服務與請求隊列移開。 如果您決定繼續使用asyncTasks,請確保您的取消已正確實施。

希望這有助於

+0

嗨!我試圖取消這些請求。 (並非所有活動)我應該在哪裏放置取消方法?在onPause和onDestroy方法?取消方法將釋放連接?謝謝! – hcpeter 2012-04-14 15:30:40

0

這個問題已經討論:

Android HttpClient performance

  1. 打開了connectionMgr調試級別的日誌記錄,檢查生命週期事件
  2. 看看closeExpiredConnections()方法的樣子at
  3. closeIdleConnections(long idleTimeout,TimeUnit tunit)

我認爲你應該更加關注來自connectionPool的連接的生命週期,特別是關閉和重用閒置和未使用的連接。

您可以查看ThreadSafeConnManager的API/Docs,或者查看源代碼。

+0

我試過了,但效果不好。每次運行後,我都會在點擊幾下後獲得無限進度條。 – hcpeter 2012-04-14 16:50:27