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() が呼び出されると、リクエストは Reading 状態になり、次のような結果が予想されます。
    • 読み取りアクションは成功しましたが、使用可能なデータがさらにあります。onReadCompleted() が呼び出され、リクエストが Waiting for read() 状態に戻りました。アプリは、read() メソッドを再度呼び出して、レスポンス本文の読み取りを続行する必要があります。また、cancel() メソッドを使用してリクエストの読み取りを停止することも可能です。
    • 読み取りアクションが成功し、使用可能なデータは残っていません。onSucceeded() メソッドが呼び出され、リクエストの最終状態は現在 Succeeded です。
    • 読み取りアクションが失敗しました。onFailed メソッドが呼び出され、リクエストの最終状態は現在 Failed です。

次の図は、UrlRequest オブジェクトのライフサイクルを示します。

Cronet リクエストのライフサイクル図
Cronet リクエストのライフサイクル

凡例
Cronet の初期状態の凡例アイコン 初期状態 Cronet の最終状態の凡例アイコン 最終状態
Cronet の遷移状態の凡例アイコン 遷移状態 Cronet コールバック メソッドの凡例アイコン コールバック メソッド
Cronet クライアント アクションの凡例アイコン UrlRequest メソッド