瞭解使用 Cronet 建立的要求生命週期,以及如何使用程式庫提供的回呼方法管理要求。
生命週期總覽
UrlRequest 類別代表使用 Cronet 程式庫建立的網路要求。如要瞭解 UrlRequest 生命週期,請務必掌握下列概念:
- 狀態
- 狀態是指要求在特定時間的特定情況。
使用 Cronet 程式庫建立的
UrlRequest物件會在生命週期中經歷不同狀態。要求生命週期包含初始狀態,以及多個轉換和最終狀態。 UrlRequest種方式- 用戶端可以根據狀態,對
UrlRequest物件呼叫特定方法。這些方法會將要求從一個狀態移至另一個狀態。 Callback種方式- 只要實作
UrlRequest.Callback類別的方法,應用程式就能接收要求進度的更新資訊。您可以實作回呼方法,呼叫UrlRequest物件的方法,將生命週期從一個狀態轉換到另一個狀態。
以下清單說明 UrlRequest 生命週期的流程:
- 應用程式呼叫
start()方法後,生命週期會處於「已啟動」狀態。 - 伺服器可能會傳送重新導向回應,將流程導向
onRedirectReceived()方法。在這個方法中,您可以採取下列其中一項用戶端動作:- 使用
followRedirect()追蹤重新導向。這個方法會將要求恢復為「Started」狀態。 - 使用
cancel()取消要求。這個方法會將要求傳送至onCanceled()方法,讓應用程式在要求進入「已取消」最終狀態前,執行其他作業。
- 使用
- 應用程式追蹤所有重新導向後,伺服器會傳送回應標頭,Cronet 則會呼叫
onResponseStarted()方法。要求處於「Waiting for read()」狀態。應用程式必須呼叫read()方法,嘗試讀取部分回應主體。應用程式呼叫read()後,要求會處於 Reading 狀態,可能會有下列結果:- 讀取動作成功,且有更多可用資料。Cronet 會呼叫
onReadCompleted()方法,要求會再次進入「Waiting for read()」狀態。應用程式可以再次呼叫read()方法,繼續讀取回應內文。應用程式也可以使用cancel()方法停止讀取要求。 - 讀取動作成功,且沒有更多可用資料。Cronet 會呼叫
onSucceeded()方法,且要求處於「Succeeded」最終狀態。 - 讀取動作失敗。Cronet 會呼叫
onFailed()方法,要求的最終狀態為「Failed」。
- 讀取動作成功,且有更多可用資料。Cronet 會呼叫
下圖顯示 UrlRequest 物件的生命週期:
Cronet 要求生命週期
| 圖例 | |
|---|---|
UrlRequest 種方法 |