Retrofit分析面試總結

本著針對面試屈糊,不負責任的態(tài)度玩徊,寫下《面試總結》系列租悄。本系列記錄面試過程中各個知識點,而不是入門系列恩袱,如果有不懂的自行學習泣棋。


轉(zhuǎn)載請標明出處,本文地址:http://www.reibang.com/p/491603d9fadc

不負責任系列


涉及到的設計模式

外觀模式,構建者模式畔塔,工廠模式潭辈,代理模式,適配器模式澈吨,策略模式把敢,觀察者模式

概括

Retrofit就是一個網(wǎng)絡請求框架的封裝,底層的網(wǎng)絡請求默認使用的Okhttp谅辣,本身只是簡化了用戶網(wǎng)絡請求的參數(shù)配置等修赞,還能與Rxjava相結合,使用起來更加簡潔方便桑阶。

  • App應用程序通過Retrofit請求網(wǎng)絡柏副,實際上是使用Retrofit接口層封裝請求參數(shù),之后由OkHttp完成后續(xù)的請求操作蚣录。
  • 在服務端返回數(shù)據(jù)之后割择,OkHttp將原始的結果交給Retrofit,Retrofit根據(jù)用戶的需求對結果進行解析包归。
  • 完成數(shù)據(jù)的轉(zhuǎn)化(converterFactory),適配(callAdapterFactory),通過設計模式進行各種擴展公壤。

使用

    @GET("/user/{user}/repos")
    Call<List<Repo>> listRepos(@Path("user") String user);

    //call封裝了整個okhttp的請求
    
    Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("https://api.github.com/")
                        .addConverterFactory(GsonConverteractory.create())
                        //.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                        .build();
    //converterFactory
    //后續(xù)交給okhttp

使用Retrofit的七步驟

  • 添加Retrofit依賴换可,網(wǎng)絡權限
  • 定義接收服務器返回數(shù)據(jù)的Bean
  • 創(chuàng)建網(wǎng)絡請求的接口,使用注解(動態(tài)代理厦幅,核心)
  • builder模式創(chuàng)建Retrofit實例沾鳄,converter,calladapter...
  • 創(chuàng)建接口實例确憨,調(diào)用具體的網(wǎng)絡請求
  • call同步/異步網(wǎng)絡請求
  • 處理服務器返回的數(shù)據(jù)

Retrofit網(wǎng)絡通信八步驟

  1. 創(chuàng)建Retrofit實例
  2. 定義網(wǎng)絡請求接口译荞,并為接口中的方法添加注解
  3. 通過動態(tài)代理生成網(wǎng)絡請求對象
  4. 通過網(wǎng)絡請求適配器將網(wǎng)絡請求對象進行平臺適配
  5. 通過網(wǎng)絡請求執(zhí)行器,發(fā)送網(wǎng)絡請求(call)
  6. 通過數(shù)據(jù)解析器解析數(shù)據(jù)
  7. 通過回調(diào)執(zhí)行器休弃,切換線程
  8. 用戶在主線程處理返回結果

代理

為其他對象提供一種代理吞歼,用以控制對這個對象的訪問

  1. 靜態(tài)

  2. 動態(tài)

    • 在程序運行時創(chuàng)建的代理方式
    • 無侵入增強
    • jdk動態(tài)代理 vs cglib
jdk動態(tài)代理
  • 只能為接口動態(tài)
  • InvocationHandler必須要實現(xiàn)
  • invoke的參數(shù)中獲取參數(shù)
  • invoke的返回值返回給使用者
  • newProxyInstance中傳入InvocationHandler
總結:
  1. 運行期
  2. InvocationHandler接口和Proxy類
  3. 動態(tài)代理與靜態(tài)代理的不同

源碼

  1. serviceMethonCache //緩存,網(wǎng)絡請求對象
  2. Factory callFactory //默認ok
  3. HttpUrl baseUrl
  4. List<Converter.Factory> converterFactories
  5. List<CallAdapter.Factory> callAdapterFactories
  6. Executor callbackExecutor //執(zhí)行回調(diào)
  7. boolean validateEagerly //是否立即解析接口中方法

builder

  1. platform

單例獲取不同平臺
Android平臺中MainthreadExecutor

callAdapterFactory

通過calladapter將原始Call進行封裝塔猾,找到對應的執(zhí)行器篙骡。如rxjavaCallFactory對應的Observable,轉(zhuǎn)換形式Call<T> --> Observable<T>

converterFactory

數(shù)據(jù)解析Converter丈甸,將response通過converterFactory轉(zhuǎn)換成對應的數(shù)據(jù)形式糯俗,GsonConverterFactory,F(xiàn)astJsonConverterFactory睦擂。

Retrofit

Retrofit核心類得湘,對外提供接口。通過retrofit.create()創(chuàng)建retrofit實例顿仇,外觀模式淘正。在create()方法中,使用動態(tài)代理模式對請求的接口中方法進行封裝(ServiceMethod)夺欲,初始化OkhttpCall跪帝。

ServiceMethod

核心處理類,解析方法和注解些阅,toRequest()方法中生成HttpRequest伞剑。創(chuàng)建responseConverter(將response流轉(zhuǎn)換為String或?qū)嶓w),創(chuàng)建callAdapter

OkhttpCall

是對okhttp3.Call的封裝調(diào)用

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末市埋,一起剝皮案震驚了整個濱河市黎泣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缤谎,老刑警劉巖抒倚,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坷澡,居然都是意外死亡托呕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來项郊,“玉大人馅扣,你說我怎么就攤上這事∽沤担” “怎么了差油?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長任洞。 經(jīng)常有香客問我蓄喇,道長,這世上最難降的妖魔是什么交掏? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任妆偏,我火速辦了婚禮,結果婚禮上耀销,老公的妹妹穿的比我還像新娘楼眷。我一直安慰自己,他們只是感情好熊尉,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布罐柳。 她就那樣靜靜地躺著,像睡著了一般狰住。 火紅的嫁衣襯著肌膚如雪张吉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天催植,我揣著相機與錄音肮蛹,去河邊找鬼。 笑死创南,一個胖子當著我的面吹牛伦忠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稿辙,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼昆码,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了邻储?” 一聲冷哼從身側(cè)響起赋咽,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吨娜,沒想到半個月后脓匿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡宦赠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年陪毡,在試婚紗的時候發(fā)現(xiàn)自己被綠了米母。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡毡琉,死狀恐怖爱咬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绊起,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布燎斩,位于F島的核電站虱歪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏栅表。R本人自食惡果不足惜笋鄙,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怪瓶。 院中可真熱鬧萧落,春花似錦、人聲如沸洗贰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敛滋。三九已至许布,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绎晃,已是汗流浹背蜜唾。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庶艾,地道東北人袁余。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像咱揍,于是被迫代替她去往敵國和親颖榜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容