2014-04-23 109 views
13

我有一個Android應用程序,目前使用Volley庫進行網絡請求和顯示NetworkImageView下載的圖像。併發HTTP請求與改造

我想測試Retrofit的功能,因爲我需要運行很多請求(數千)我有點關心並行執行。 Volley處理並行請求,RequestQueue將併發運行請求限制爲四個,而其他請求排隊等待執行。在Retrofit文檔中,我沒有找到任何處理併發請求數的方法,我懷疑這些細節留給了這個庫中的開發人員。

這是正確的嗎?如果是這樣,是否有任何面向Android的實現/庫可用?否則,處理並行請求的最佳實踐是什麼?

回答

36

Retrofit使用Executor排隊請求。

默認使用Executors.newCachedThreadPool它允許無限制的線程。這適合於大多數用例,因爲通常你只會有一個或兩個請求同時發生。

但是,您可以通過在構建RestAdapter時提供自己的行爲來更改此行爲。致電setExecutors並傳入一個執行程序,該執行程序使用一個受限制的線程池(僅限於任何您想要的數字)。對於第二個參數,只需傳遞一個MainThreadExecutor的新實例,以便在主線程上發生回調。

+0

你是否建議使用'ThreadPoolExecutor'來處理我的線程?如果是的話,我在使用它之前遷移到了「Volley」,但我遇到了兩個主要問題:1)由於隊列已滿,我失去了一些請求,Volley的隊列無限。 2)有些請求已從隊列中刪除,因爲它們等待時間過長。 – Vektor88

+3

是的。使用無界隊列將解決1和2.有幾個'java.util.concurrent'可供選擇。 –

+0

感謝提示,這絕對是工作。 – Vektor88