在56視頻那會,就開始接觸AQuery。直到 2017,網絡請求這塊才真正換成 OkHttp。掐指一算,竟已有好幾個年頭。
google了下,相關資料都好少了。感嘆不已。
言歸正常,下面記錄下這一兩年火熱的 android 網絡方案:RX + Retrofix2 + OkHttp3
App里少不了網絡請求,總不能每次都 new Retrofix 或者 new OkHttpClient 增加不必要的開銷。
所以搞了個單例,如下圖:
這里需要注意的是 context,這玩意兒很容易造成內存泄露。
OkHttpClient 的攔截器機制,看起來真是舒服,一目了然。
根據上圖,代碼里的流程就是:(1)網絡請求 -> (2)添加公共參數 -> (3)添加header -> (4)post body的內容轉換(如果是post請求)-> (5)記錄 api 埋點請求響應時間(如果命中)。
這里需要注意的是,獲取response 后,會倒序路過所有攔截器。比如 ApiCpInterceptor。
如圖所示,記錄了請求開始時間與結束時間。
獲取完 response 并路過所有攔截器后,OkHttp的任務完成。
輪到 Retrofix 上場,不對,其實一開始調用就上場了哈。后續補充,先繼續 response。此時,會調用TokenCheckConverterFactory,一開始是直接使用 GsonConverterFactory ,但問題來了,業務上需要對token失效的情況做出反應。如果用 GsonConverterFactory的話,相關處理將繼續往上拋,可能就到 Rx 層面上了。所以自定義了 ConverterFactory,Retrofix 也是超贊的。
最后,看看調用的接口定義與調用方法。
Rx 也超贊,由于要去看電影了,寫得很粗糙。閃人。