在開發(fā)中,我們使用的框架可以說是很多,從開始的原生的網(wǎng)絡(luò)請(qǐng)求HttpClient到httpUrlConnection,再到后面那些android大神封裝的AsyncHttpClient,異步請(qǐng)求網(wǎng)絡(luò),和以前的框架Afinal 到 Xutils3.0等一系列的網(wǎng)絡(luò)框架.
知道google推出最新的框架volley,又是在技術(shù)上推進(jìn)了一大步.也許現(xiàn)在我們大家都在說,volley都已經(jīng)過時(shí)了,現(xiàn)在大家都在使用OkHttp3,OKgo,RxJava+Retrofit等一系列最新的框架.雖然都會(huì)用,網(wǎng)絡(luò)框架,當(dāng)面試官問到你所用的網(wǎng)絡(luò)框架的原理的時(shí)候.你一下子就云里霧里了.網(wǎng)絡(luò)框架使我們app的核心部分,我們不僅知其然,還要知其所以然.對(duì)其源碼進(jìn)行解剖.
看過官方文檔的開發(fā)人員,就知道,官方給了一個(gè)volley的工作流程圖,如下:
Paste_Image.png
也許你光看這樣的流程圖,你根本不知道講的什么.那么接下來我們結(jié)合源代碼,進(jìn)行一步一步的分析,也許你就明白
首先使用volley的第一步驟是什么呢?
Volley.newRequestQueue(Context)來獲取一個(gè)RequestQueue對(duì)象,接著我們就從這個(gè)方法開始入手
代碼:
Paste_Image.png
從代碼中我們可以清楚的看到,該方法只執(zhí)行了一個(gè)方法,那么我們進(jìn)入這個(gè)方法可以看到
Paste_Image.png
我們可以看到了面的statck,其實(shí)hurlStatck其實(shí)內(nèi)部就是HttpUrlConnection進(jìn)行網(wǎng)絡(luò)通信的.最后調(diào)用了Start()方法
接下來我們進(jìn)入start()方法,看執(zhí)行了什么
Paste_Image.png
先是創(chuàng)建了CacheDispacher實(shí)例,然后調(diào)用了他的start方法,接著for循環(huán)4次,就會(huì)有5個(gè)線程在后臺(tái)運(yùn)行,不斷的等待網(wǎng)絡(luò)請(qǐng)求的到來,得到RequestQueue后,我們調(diào)用add方法. 未完待續(xù)…………