下面是图像请求的Volley日志的快照。几乎一半的渲染时间是由于网络队列获取。另一个甚至更高,大部分时间都在网络队列中。如何对此进行优化,使网络队列获取更快?是什么决定了(除了线程优先级,图像请求在默认情况下是低优先级请求),网络队列接收的速度?
注意:我在三星银河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发布于 2013-08-16 07:39:02
网络队列占用时间是因为您有大量的请求正在运行。如果您有4个线程(默认情况下)运行4个线程,并且有8个请求,那么所有的第一个请求都需要500‘s,那么剩下的请求的网络队列占用将是500’s,因为等待500‘s才能在队列中找到位置。
您可以通过创建一个比RequestQueue更高的DEFAULT_NETWORK_THREAD_POOL_SIZE来“消除”它,但是请记住,默认的存在是有原因的。例如,如果您同时下载20个图像,则可以运行OOM条件。然而,如果您有大量的低内存和糟糕的延迟请求,增加它应该可以帮助您的性能而不冒oom条件的风险。
https://stackoverflow.com/questions/18110581
复制相似问题