OKHttp同時支持synchronous and asynchronous api。 如果我想發出一個異步請求時,我可以:使用OKHttp,AsyncTask和OKhttp異步請求中的同步請求有什麼區別?
- 使用的AsyncTask,並出具OKhttp同步API。
- 發出OKhttp異步API。
這2個選項有什麼區別?哪一個更好?
OKHttp同時支持synchronous and asynchronous api。 如果我想發出一個異步請求時,我可以:使用OKHttp,AsyncTask和OKhttp異步請求中的同步請求有什麼區別?
這2個選項有什麼區別?哪一個更好?
相當多的不同!
對HTTP請求使用AsyncTask
幾乎是您在Android上可以做的最糟糕的事情之一。它充滿了無條件避免的問題和疑難雜症。例如,您不能在執行期間取消請求。使用AsyncTask
的模式通常也會泄漏對Android開發的一個主要罪惡Activity
的引用。
OkHttp的異步是有很多原因大大優於:
Callback
的引用將被釋放並且不會被調用。另外,如果請求還沒有開始,它永遠不會被執行。如果您使用HTTP/2或SPDY,我們實際上可以取消中間請求的節省帶寬和功耗。Activity
中發出的每個請求都可以使用Activity
實例進行標記。然後在或onStop
中,您可以取消所有使用Activity
實例標記的請求。所以如果可以的話,請使用Call.enqueue
!
沒什麼。 OKHttp異步是OKHttp API驅動的。所以只要你把所有平臺的瓶子捆綁在一起,你應該很好。 AsyncTask是Android做事的方式。
但是,由於蜂窩異步任務按順序運行任務並且不是並行運行。這意味着儘管AsyncTask的執行方法跨越了一個新的線程,該線程將您的作業從UI線程運行,但發送到一個AsyncTask的所有任務都運行在相同的跨線程中。
因此,對於提交的3個任務,您不會獲得3個線程,它們都將在單個跨接線程上按順序運行。使用OKHttp,您可以使用回調和異步GET和POST實現真正的並行性。
儘管您也可以在AsyncTask方法中執行真正的並行性(檢查AsyncTask中的重載執行方法),但默認的Android行爲不是這樣做的。