用一個月的下班以後玩耍時間的空餘,閱讀了Volley的源碼,前面也記錄了閱讀過程,這篇旨在梳理一下Volley的工做流程。cookie
一般,咱們使用Volley,流程是很簡單的。建立一個Request,再新建一個RequestQueue,最後把Request加入到RequestQueue中,接着咱們就能夠等待請求的Response了,若是是StringRequest這樣的請求,咱們能夠直接獲得String類型的Response。post
那麼,RequestQueue是怎樣輪循到Request,Request又是怎樣發送http請求,而後獲得響應,將響應一步步轉化成Response,最後,Response又是怎樣變成了最終的String的,前面的文章中一行一行地閱讀了這些代碼,這裏作一個小小的總結。spa
1.RequestQueue是一個阻塞型隊列,當有請求時,它就會去發請求,沒請求時,它就會阻塞它所在的線程。因此,只要有請求加入RequestQueue,它就會工做,隊列爲空時,就在等待請求。線程
2.請求首先會在HttpStack完成connection等相關過程,包括加cookie,判斷請求類型,爲post請求body添加Params。最終會獲得一個HttpResponse。blog
3.HttpResponse會交給Network進行處理,Network主要處理http請求的響應,包括20X,304,404這樣的異常響應。而後,從HttpResponse中抽出header和content,建立出NetworkResponse。隊列
4.上面2.3的方法都是在NetworkDispatcher中執行的,完成以後,Response<?> response = request.parseNetworkResponse(networkResponse);會將NetworkResponse轉化爲Response,這個實如今Request中,在這裏調用。源碼
5.同時,在在NetworkDispatcher中,ExecutorDelivery會接受request和response,並調用mRequest.deliverResponse(mResponse.result);生成String類型的響應。工作流
以上就是一次Volley請求的大體流程。io
Done~network