如何在android Volley中优化网络队列?(Volley Google IO 2013)

Tes*_*est 9 android android-volley

以下是图像请求的Volley日志的快照.几乎一半的渲染时间是由于网络队列占用.另一个是更高的,大部分时间在网络队列中.如何优化这样才能使网络队列更快?什么决定(除了线程优先级,图像请求默认为低优先级请求),网络队列的速度 - 采取什么?

注意:我是在三星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
Run Code Online (Sandbox Code Playgroud)

这是另一个需要更长时间的:

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
Run Code Online (Sandbox Code Playgroud)

neu*_*ron 8

network-queue-take需要时间,因为您有大量请求在运行.如果您(默认情况下)有4个线程正在运行,并且有8个请求,则说所有第一个请求都需要500毫秒,那么其余请求的network-queue-take将是500毫秒,因为它等待500毫秒来获取队列中的一个点.

你可以通过创建一个高于defualt DEFAULT_NETWORK_THREAD_POOL_SIZE的RequestQueue来"消除"它,但请记住默认是有原因的.例如,如果您同时下载20张图像,则可能会遇到OOM条件.但是,如果您有大量低内存和不良延迟请求,增加它应该有助于您的性能,而不会有任何风险.