OkHttp的一些東西

1.同步請求必須在子線程中執(zhí)行,因為在Android4.0之后主線程中不允許網(wǎng)絡請求,究其根本是因為同步網(wǎng)絡請求會造成線程阻塞,主線程中阻塞5秒會ANR。

2.onResponse回調的參數(shù)是response,一般情況下,比如我們希望獲得返回的字符串,可以通過response.body().string()獲?。蝗绻M@得返回的二進制字節(jié)數(shù)組,則調用response.body().bytes();如果你想拿到返回的inputStream,則調用response.body().byteStream()

3.client.execute直接返回response,通過線程間通信的方式:1.handler.sendMessage2.runOnUiThread(runnable) 3.view.post(runnable) 在主線程中更新UI

4.同步請求一般用于當前線程的執(zhí)行必須使用另一個線程的數(shù)據(jù),比如A線程執(zhí)行中必須使用B線程返回的數(shù)據(jù),此時可以在A線程中使用client.execute(),A線程阻塞,等待B線程返回結果后繼續(xù)執(zhí)行。//好像有錯,應該是同步請求只能用于子線程,會阻塞當前線程

5.應盡量使用異步請求,因為同步請求需要我們自己創(chuàng)建子線程。

6.Activity判斷當前線程是否是主線程是在onResume()方法中。所以在onCreate中創(chuàng)建子線程并更新UI可能不會報錯。

7.異步請求call.enqueue(newCallback())的兩個回調方法onFailure和onResponse均是在子線程中執(zhí)行的,支持大文件的下載。需要更新UI是仍需要使用handler等方法。

8.每個 response的body 只能被消費一次,多次消費會拋出異常,也就是說每個body只能被獲取一次。body 必須被關閉,否則會發(fā)生資源泄漏。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容