Cronet 要求生命週期

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

生命週期總覽

使用 Cronet 程式庫建立的網路要求會以 UrlRequest 類別表示。以下概念有助於瞭解 UrlRequest 生命週期:

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

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

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

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

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

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