網(wǎng)絡(luò)請(qǐng)求的流程:https://juejin.cn/post/6910223545154928648(簡(jiǎn)書資料鏈接)
1.創(chuàng)建URLRequest,如果request有適配器述暂,接下來(lái)會(huì)使用適配器處理原始URLRequest掀虎, 沒有適配器的話剿牺,直接回調(diào)創(chuàng)建Request方法
2.創(chuàng)建URLSessionTask成功
3.收到請(qǐng)求指標(biāo)回調(diào)
4.由Alamofire創(chuàng)建拋出的錯(cuò)誤挡篓, 比如自定義認(rèn)證處理失敗,(OAuth2認(rèn)證)
5.URLSessionTask請(qǐng)求完成孽惰,可能成功可能失敗,接下來(lái)會(huì)判定是否需要重試,如果會(huì)重試,該回調(diào)會(huì)被調(diào)用多次
6.準(zhǔn)備開始重試(在這里可以做refreshToken)
7.請(qǐng)求完成镰踏,開始解析響應(yīng)數(shù)據(jù)
8.Request調(diào)用resume方法的時(shí)候會(huì)回調(diào)該方法
9.Request關(guān)聯(lián)的URLSessionTask繼續(xù)的時(shí)候回調(diào)
10.Request調(diào)用suspend掛起
11.Request關(guān)聯(lián)的Task被掛起
12.Request調(diào)用cancel
13.Request關(guān)聯(lián)的Task被取消
14.檢測(cè)響應(yīng)是否有效成功后回調(diào)(這里是最后解析出來(lái)的結(jié)果)
15.DataRequest成功創(chuàng)建Data類型的DataResponse時(shí)回調(diào)(沒有序列化)
16.DataRequest成功創(chuàng)建序列化的DataResponse時(shí)回調(diào)
17.檢測(cè)響應(yīng)有效成功
18.從stream中成功序列化數(shù)據(jù)后調(diào)用
二,上傳UploadRequest 特有事件
1.上傳請(qǐng)求成功創(chuàng)建Uploadable協(xié)議對(duì)象成功
2.當(dāng)上傳請(qǐng)求從InputSteam開始提供數(shù)據(jù)時(shí)回調(diào), 只有在上傳請(qǐng)求的InputStream不是Data也不是文件url類型才會(huì)回調(diào)
3.用來(lái)創(chuàng)建上傳請(qǐng)求沙合, 可以從內(nèi)存(Data)奠伪, 磁盤(file從文件上傳, 并可以設(shè)置上傳完成后是否刪除源文件), 流(InputStream)上傳數(shù)據(jù)首懈,?注意上傳請(qǐng)求是
三,DownloadRequest 特有事件
1.下載Task完成绊率,且緩存文件被清除之后回調(diào)
2.下載請(qǐng)求成功創(chuàng)建轉(zhuǎn)存目錄后回調(diào)
3.下載請(qǐng)求檢測(cè)有效性成功
4.使用原數(shù)據(jù)解析響應(yīng)成功(沒有序列化)
5.序列化解析響應(yīng)成功
下載任務(wù)會(huì)先把文件下載到臨時(shí)的緩存路徑, 然后將文件拷貝到下載目標(biāo)路徑, 使用閉包來(lái)決定可以把下載路徑的決定推遲到下載完成時(shí), 可以根據(jù)臨時(shí)文件目錄與下載響應(yīng)頭來(lái)決定下載目標(biāo)路徑以及文件保存策略
返回默認(rèn)的文件儲(chǔ)存路徑(只是把默認(rèn)的文件名重命名為加上Alamofire_前綴, 文件還是在緩存目錄, 會(huì)被系統(tǒng)刪除, 如果要保存文件, 需要轉(zhuǎn)移到其他目錄)
四,refreshToken,使用請(qǐng)求攔截器,RequestAdapter請(qǐng)求適配器與RequestRetrier請(qǐng)求重試器(http://www.reibang.com/p/dde5ff22b681)實(shí)現(xiàn)方法