瞭解Cronet創建的請求(Request)的生命週期,
學習如何使用回調函數(Callback)管理這些生命週期。
生命週期概述
Cronet庫創建的網絡請求使用UrlRequest類來描述。理解
UrlRequest的生命週期的一些非常重要的概念如下:
- 狀態(State): 狀態是請求在某一時間進入的特定條件。在生命週期中,Cronet庫創建的UrlRequest 對象在不同狀態之間切換。請求生命週期狀態包括:初始化狀態、多種過度狀態和終止狀態。
行爲方法 UrlRequest
methods: 客戶端請求在不同狀態可以調用不同的方法。這些方法可以將一個狀態切換到另一個狀態。回調函數 Callback
methods:通過實現UrlRequest.Callback類的方法,你的APP可以與請求的進度保持一致,也可以通過實現這些回調函數調用請求的行爲方法,將一個狀態切換到另一個狀態。
下面列表描述了UrlRequest生命週期的流程:
- APP調用started()函數後,生命週期處於開始狀態(Started)。
- 服務端調用發送鏈接跳轉響應後,進入
onRedirectReceived()回調函數。在這個函數中可以執行兩個行爲函數:
a. 調用followRedirect(),然後重新進入
開始狀態(Started)。 b.
調用cancel(),進入onCanceled()函數,app在請求進入已取消(
Canceled)狀態之前還可以執行其他的操作。
當app所有url跳轉執行完後,服務端發送響應頭信息,onResponseStarted()函數會被調用。請求進入等待讀(
Waiting for read())狀態。app應該調用read()方法讀取響應體。read()方法調用後,進入讀取中狀態(
Reading),然後可能會遇到下面集中情況:
- 讀取行爲完成,還有更多數據可讀時:
onReadCompleted()會被調用,然後再次進入等待讀狀態(
Waiting for read())。app應該執行read()繼續讀響應體。app也可以執行cancal()函數停止讀取。
- 讀取行爲完成,沒有更多數據可讀時:
onSucceeded()會被調用,請求進入最終的完成(
Succeeded)狀態。
- 讀取行爲出錯時:
onFailed會被調用,然後請求進入最終的出錯(
Failed)狀態。
下表展示了UrlRequest對象的整個生命週期:
其中:
原文地址:
https://developer.android.com/guide/topics/connectivity/cronet/lifecycle#overview