Cronet を使用して作成されたリクエストのライフサイクルと、ライブラリが提供するコールバック メソッドを使用してリクエストを管理する方法について説明します。
ライフサイクルの概要
Cronet ライブラリを使用して作成されたネットワーク リクエストは、UrlRequest
クラスで表されます。UrlRequest
のライフサイクルを理解するには、次のコンセプトが重要です。
- 状態
- 状態とは、特定の時点でリクエストが発生している特定の条件です。Cronet ライブラリを使用して作成された UrlRequest オブジェクトは、そのライフサイクル内でさまざまな状態に遷移します。リクエストのライフサイクルには、初期状態、複数の移行状態、最終状態があります。
UrlRequest
メソッド- クライアントは、状態に応じて
UrlRequest
オブジェクトの特定のメソッドを呼び出すことができます。このメソッドは、リクエストを別の状態に移動します。 Callback
メソッドUrlRequest.Callback
クラスのメソッドを実装することで、アプリはリクエストの進捗状況に関する最新情報を受け取ることができます。ライフサイクルを状態から別の状態に遷移するUrlRequest
オブジェクトのメソッドを呼び出すコールバック メソッドを実装できます。
次のリストは、UrlRequest
ライフサイクルのフローを示しています。
- アプリが
start()
メソッドを呼び出した後、ライフサイクルは開始状態になります。 - サーバーがリダイレクト レスポンスを送信すると、
onRedirectReceived()
メソッドにフローが移ります。この方法では、次のいずれかのクライアント アクションを行うことができます。followRedirect()
を使用してリダイレクトに従います。このメソッドは、リクエストを Started 状態に戻します。cancel()
を使用してリクエストをキャンセルします。 このメソッドはリクエストをonCanceled()
メソッドに受け渡します。このメソッドは、リクエストが Canceled の最終状態に移行される前に、アプリで追加のオペレーションを実行できます。
- アプリがすべてのリダイレクトをたどった後、サーバーがレスポンス ヘッダーを送信し、
onResponseStarted()
メソッドが呼び出されます。リクエストは Waiting for read() 状態になります。アプリはread()
メソッドを呼び出して、レスポンス本文の一部の読み取りを試みる必要があります。read()
が呼び出されると、リクエストは Reading 状態になります。次のような結果になる可能性があります。- 読み取りアクションは成功しましたが、使用可能なデータがさらにあります。
onReadCompleted()
が呼び出され、リクエストは再び Wait for read() 状態になります。アプリはread()
メソッドを再度呼び出して、レスポンス本文の読み取りを続行する必要があります。また、アプリでcancel()
メソッドを使用してリクエストの読み取りを停止することもできます。 - 読み取りアクションは成功し、これ以上データがありません。
onSucceeded()
メソッドが呼び出され、リクエストが成功最終状態になります。 - 読み取りアクションが失敗しました。
onFailed
メソッドが呼び出され、リクエストの最終状態は「失敗」になります。
- 読み取りアクションは成功しましたが、使用可能なデータがさらにあります。
次の図は、UrlRequest
オブジェクトのライフサイクルを示しています。
凡例 | |
---|---|
初期状態 | 最終状態 |
遷移状態 | コールバック メソッド |
UrlRequest メソッド |