在56視頻那會,就開始接觸AQuery廓啊。直到 2017欢搜,網(wǎng)絡(luò)請求這塊才真正換成 OkHttp。掐指一算谴轮,竟已有好幾個年頭炒瘟。
google了下,相關(guān)資料都好少了第步。感嘆不已疮装。
言歸正常,下面記錄下這一兩年火熱的 android 網(wǎng)絡(luò)方案:RX + Retrofix2 + OkHttp3
App里少不了網(wǎng)絡(luò)請求粘都,總不能每次都 new Retrofix 或者 new OkHttpClient 增加不必要的開銷廓推。
所以搞了個單例,如下圖:
這里需要注意的是 context翩隧,這玩意兒很容易造成內(nèi)存泄露樊展。
OkHttpClient 的攔截器機制,看起來真是舒服堆生,一目了然专缠。
根據(jù)上圖,代碼里的流程就是:(1)網(wǎng)絡(luò)請求 -> (2)添加公共參數(shù) -> (3)添加header -> (4)post body的內(nèi)容轉(zhuǎn)換(如果是post請求)-> (5)記錄 api 埋點請求響應(yīng)時間(如果命中)淑仆。
這里需要注意的是涝婉,獲取response 后,會倒序路過所有攔截器蔗怠。比如 ApiCpInterceptor嘁圈。
如圖所示省骂,記錄了請求開始時間與結(jié)束時間。
獲取完 response 并路過所有攔截器后最住,OkHttp的任務(wù)完成钞澳。
輪到 Retrofix 上場,不對涨缚,其實一開始調(diào)用就上場了哈轧粟。后續(xù)補充,先繼續(xù) response脓魏。此時兰吟,會調(diào)用TokenCheckConverterFactory,一開始是直接使用 GsonConverterFactory 茂翔,但問題來了混蔼,業(yè)務(wù)上需要對token失效的情況做出反應(yīng)。如果用 GsonConverterFactory的話珊燎,相關(guān)處理將繼續(xù)往上拋惭嚣,可能就到 Rx 層面上了。所以自定義了 ConverterFactory悔政,Retrofix 也是超贊的晚吞。
最后,看看調(diào)用的接口定義與調(diào)用方法谋国。
Rx 也超贊槽地,由于要去看電影了,寫得很粗糙芦瘾。閃人捌蚊。