2013-08-07 22 views
9

下面是圖像請求的Volley日誌的快照。渲染時間幾乎有一半是由網絡隊列引起的。另一個更高,大部分時間都在網絡隊列中。這怎麼可以優化,以便網絡隊列更快?什麼決定(除了線程優先級,圖像請求默認爲低優先級請求),網絡隊列的速度?如何在android Volley中優化網絡隊列嗎? (Volley Google IO 2013)

注意:我在Samsung Galaxy S4上運行了這個。

08-07 11:01:09.560: D/Volley(938): [1] MarkerLog.finish: (3662 ms) [ ] http://farm6.static.flickr.com/5487/9452149004_c4ba6d2d97_t.jpg 0x8da7e4ac LOW 84 
08-07 11:01:09.560: D/Volley(938): [1] MarkerLog.finish: (+0 ) [ 1] add-to-queue 
08-07 11:01:09.565: D/Volley(938): [1] MarkerLog.finish: (+0 ) [12239] cache-queue-take 
08-07 11:01:09.565: D/Volley(938): [1] MarkerLog.finish: (+0 ) [12239] cache-miss 
08-07 11:01:09.570: D/Volley(938): [1] MarkerLog.finish: (+1694) [12243] network-queue-take 
08-07 11:01:09.570: D/Volley(938): [1] MarkerLog.finish: (+1852) [12243] network-http-complete 
08-07 11:01:09.570: D/Volley(938): [1] MarkerLog.finish: (+50 ) [12243] network-parse-complete 
08-07 11:01:09.575: D/Volley(938): [1] MarkerLog.finish: (+21 ) [12243] network-cache-written 
08-07 11:01:09.575: D/Volley(938): [1] MarkerLog.finish: (+0 ) [12243] post-response 
08-07 11:01:09.580: D/Volley(938): [1] MarkerLog.finish: (+45 ) [ 1] done 

這裏是另外一個需要更長時間:

08-07 11:01:09.845: D/Volley(938): [1] MarkerLog.finish: (3871 ms) [ ] http://farm3.static.flickr.com/2827/9451437485_921584cdea_t.jpg 0x24a8bf69 LOW 85 
08-07 11:01:09.860: D/Volley(938): [1] MarkerLog.finish: (+0 ) [ 1] add-to-queue 
08-07 11:01:09.865: D/Volley(938): [1] MarkerLog.finish: (+1 ) [12239] cache-queue-take 
08-07 11:01:09.870: D/Volley(938): [1] MarkerLog.finish: (+0 ) [12239] cache-miss 
08-07 11:01:09.870: D/Volley(938): [1] MarkerLog.finish: (+2543) [12242] network-queue-take 
08-07 11:01:09.875: D/Volley(938): [1] MarkerLog.finish: (+1280) [12242] network-http-complete 
08-07 11:01:09.880: D/Volley(938): [1] MarkerLog.finish: (+26 ) [12242] network-parse-complete 
08-07 11:01:09.885: D/Volley(938): [1] MarkerLog.finish: (+14 ) [12242] network-cache-written 
08-07 11:01:09.885: D/Volley(938): [1] MarkerLog.finish: (+0 ) [12242] post-response 
08-07 11:01:09.890: D/Volley(938): [1] MarkerLog.finish: (+7 ) [ 1] done 
08-07 11:01:09.905: D/dalvikvm(938): GC_CONCURRENT freed 973K, 11% free 14796K/16583K, paused 12ms+6ms, total 56ms 

回答

8

網絡隊列採取的是花時間,因爲你有大量的運行要求。如果您有(默認情況下)4個線程正在運行,並且有8個請求,說所有的第一個請求都需要500毫秒,那麼其餘請求的網絡隊列將爲500毫秒,因爲它在隊列中等待500毫秒。

您可以通過創建一個高於DEFAULT DEFAULT_NETWORK_THREAD_POOL_SIZE的RequestQueue來「消除」它,但請記住默認值是有原因的。例如,如果您同時下載20個圖像,則可能遇到OOM條件。但是,如果你有大量的低內存和延遲請求,增加它應該有助於你的性能,而不會冒着OOM條件的風險。

+0

你太棒了。謝謝!!!! 1 –