OkHttpClient疑慮之execute()與enqueue()同步與異步請求

       今天試着像鴻洋_一樣想封裝一下OkHttpClient,但是鴻洋_在封裝的源碼中卻沒有開啓新線程,難道所有都是在主線程中直接操作,讓我好迷惑。於是嘗試去Log一下線程,發現execute()直接報錯,不能在UI線程執行網絡操作。而enqueue()沒有報錯,Log出來其在線程:OkHttp http://f2.topit.me/2/56/cd/1177415867363cd562l.jpg後面的是請求地址url。沒辦法,自己看源碼也沒找出究竟,只好去泡網看看了OkHttp的源碼解析http://www.jcodecraeer.co西/anzhuokaifa/androidkaifa/2015/0326/2643.html。分析了一下各個類的作用,找到了對我最重要的東西

Dispatcher.java
Policy on when async requests are executed.

Each dispatcher uses an ExecutorService to run calls internally. If you supply your own executor, it should be able to run configured maximum number of calls concurrently.

原來在執行異步任務的時候開了一個線程池。

這個問題的發生也是自己沒有完全理解到同步與異步的含義。

進程同步:就是在發出一個功能調用時,在沒有得到結果之前,該調用就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事.

異步的概念和同步相對。當一個異步過程調用發出後,調用者不能立刻得到結果。實際處理這個調用的部件在完成後,通過狀態、通知和回調來通知調用者。

而這裏是把異步任務放在線程池中。run()得到respond後callback。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章