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

Cronet を使用して作成されたリクエストのライフサイクルと、ライブラリが提供するコールバック メソッドを使用してリクエストを管理する方法について説明します。

ライフサイクルの概要

Cronet ライブラリを使用して作成されたネットワーク リクエストは、UrlRequest クラスで表されます。UrlRequest のライフサイクルを理解するには、次のコンセプトが重要です。

状態
状態とは、特定の時点でリクエストが発生している特定の条件です。Cronet ライブラリを使用して作成された UrlRequest オブジェクトは、そのライフサイクル内でさまざまな状態に遷移します。リクエストのライフサイクルには、初期状態、複数の移行状態、最終状態があります。
UrlRequest メソッド
クライアントは、状態に応じて UrlRequest オブジェクトの特定のメソッドを呼び出すことができます。このメソッドは、リクエストを別の状態に移動します。
Callback メソッド
UrlRequest.Callback クラスのメソッドを実装することで、アプリはリクエストの進捗状況に関する最新情報を受け取ることができます。ライフサイクルを状態から別の状態に遷移する UrlRequest オブジェクトのメソッドを呼び出すコールバック メソッドを実装できます。

次のリストは、UrlRequest ライフサイクルのフローを示しています。

  1. アプリが start() メソッドを呼び出した後、ライフサイクルは開始状態になります。
  2. サーバーがリダイレクト レスポンスを送信すると、onRedirectReceived() メソッドにフローが移ります。この方法では、次のいずれかのクライアント アクションを行うことができます。
    • followRedirect() を使用してリダイレクトに従います。このメソッドは、リクエストを Started 状態に戻します。
    • cancel() を使用してリクエストをキャンセルします。 このメソッドはリクエストを onCanceled() メソッドに受け渡します。このメソッドは、リクエストが Canceled の最終状態に移行される前に、アプリで追加のオペレーションを実行できます。
  3. アプリがすべてのリダイレクトをたどった後、サーバーがレスポンス ヘッダーを送信し、onResponseStarted() メソッドが呼び出されます。リクエストは Waiting for read() 状態になります。アプリは read() メソッドを呼び出して、レスポンス本文の一部の読み取りを試みる必要があります。read() が呼び出されると、リクエストは Reading 状態になります。次のような結果になる可能性があります。
    • 読み取りアクションは成功しましたが、使用可能なデータがさらにあります。onReadCompleted() が呼び出され、リクエストは再び Wait for read() 状態になります。アプリは read() メソッドを再度呼び出して、レスポンス本文の読み取りを続行する必要があります。また、アプリで cancel() メソッドを使用してリクエストの読み取りを停止することもできます。
    • 読み取りアクションは成功し、これ以上データがありません。onSucceeded() メソッドが呼び出され、リクエストが成功最終状態になります。
    • 読み取りアクションが失敗しました。onFailed メソッドが呼び出され、リクエストの最終状態は「失敗」になります。

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

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

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