Cronet 要求生命週期

瞭解使用 Cronet 建立的要求生命週期,以及如何使用程式庫提供的回呼方法管理要求。

生命週期總覽

UrlRequest 類別代表使用 Cronet 程式庫建立的網路要求。如要瞭解 UrlRequest 生命週期,請務必掌握下列概念:

狀態
狀態是指要求在特定時間的特定情況。 使用 Cronet 程式庫建立的 UrlRequest 物件會在生命週期中經歷不同狀態。要求生命週期包含初始狀態,以及多個轉換和最終狀態。
UrlRequest 種方式
用戶端可以根據狀態,對 UrlRequest 物件呼叫特定方法。這些方法會將要求從一個狀態移至另一個狀態。
Callback 種方式
只要實作 UrlRequest.Callback 類別的方法,應用程式就能接收要求進度的更新資訊。您可以實作回呼方法,呼叫 UrlRequest 物件的方法,將生命週期從一個狀態轉換到另一個狀態。

以下清單說明 UrlRequest 生命週期的流程:

  1. 應用程式呼叫 start() 方法後,生命週期會處於「已啟動」狀態。
  2. 伺服器可能會傳送重新導向回應,將流程導向 onRedirectReceived() 方法。在這個方法中,您可以採取下列其中一項用戶端動作:
    • 使用 followRedirect() 追蹤重新導向。這個方法會將要求恢復為「Started」狀態。
    • 使用 cancel() 取消要求。這個方法會將要求傳送至 onCanceled() 方法,讓應用程式在要求進入「已取消」最終狀態前,執行其他作業。
  3. 應用程式追蹤所有重新導向後,伺服器會傳送回應標頭,Cronet 則會呼叫 onResponseStarted() 方法。要求處於「Waiting for read()」狀態。應用程式必須呼叫 read() 方法,嘗試讀取部分回應主體。應用程式呼叫 read() 後,要求會處於 Reading 狀態,可能會有下列結果:
    • 讀取動作成功,且有更多可用資料。Cronet 會呼叫 onReadCompleted() 方法,要求會再次進入「Waiting for read()」狀態。應用程式可以再次呼叫 read() 方法,繼續讀取回應內文。應用程式也可以使用 cancel() 方法停止讀取要求。
    • 讀取動作成功,且沒有更多可用資料。Cronet 會呼叫 onSucceeded() 方法,且要求處於「Succeeded」最終狀態。
    • 讀取動作失敗。Cronet 會呼叫 onFailed() 方法,要求的最終狀態為「Failed」。

下圖顯示 UrlRequest 物件的生命週期:

Cronet 要求生命週期圖表
Cronet 要求生命週期

圖例
Cronet 初始狀態圖例圖示 初始狀態 Cronet 最終狀態圖例圖示 最終狀態
Cronet 過渡狀態圖例圖示 過渡狀態 Cronet 回呼方法圖例圖示 回呼方法
Cronet 用戶端動作圖例圖示 UrlRequest 種方法