プリロード マネージャーのコンセプト

プリロード マネージャーを使用すると、ユーザーがアイテムを切り替える際の待ち時間を短縮し、コンテンツをより迅速に提供することで、ユーザー エクスペリエンスを向上させることができます。また、アイテムごとにプリロードの期間とランキングをカスタマイズすることもできます。

ソーシャル メディアでは、アプリがメディアの選択肢のリストやカルーセルをユーザーに表示することがよくあります。たとえば、アプリがショート動画のカルーセルを表示することがあります。1 つの動画が終了すると、アプリは次の動画に切り替わります。また、ユーザーが視聴している動画を気に入らない場合は、スワイプして次の動画や前の動画に移動することがあります。

動画コンテンツをプリロードしないと、ユーザー エクスペリエンスが低下する可能性があります。ユーザーがメディアを視聴し終えてから、次のメディアが読み込まれるまで待たなければならないからです。

一方、コンテンツを過度にプリロードすると、ユーザーが実際に再生しない可能性のあるコンテンツを読み込むために、電力とネットワーク帯域幅が無駄になります。

DefaultPreloadManager を使用すると、アプリでこれらの懸念事項のバランスを取ることができます。プリロード マネージャーはアプリと連携して、各メディア アイテムの重要度を判断し、適切な量を事前に読み込みます。

分業

DefaultPreloadManager を使用する場合、一部の作業はコードによって行われ、一部の作業はプリロード マネージャーによって行われます。

アプリは次のことを行う必要があります。

プリロード マネージャーは次の処理を行います。

  • アプリに追加したすべてのメディア アイテムを追跡します。
  • 優先度が無効になるたびに、アプリによって実装された TargetPreloadStatusControlを呼び出して、アプリにクエリを実行します。これにより、 読み込む各メディア アイテムの量を把握します
  • アプリにクエリを実行した後、各メディア アイテムの適切な量をプリロードします。プリロード マネージャーは、アイテムを読み込む順序を決定します。ユーザーが再生しているアイテムに最も近いアイテムを優先します。
  • アプリがコンテンツをリクエストすると、プリロード マネージャーは、すでに読み込まれているコンテンツを含む MediaSource を提供します。

プリロード マネージャーのワークフロー

このセクションでは、プリロード マネージャーを使用するアプリの一般的なワークフローについて説明します。この例では、アプリが短い動画のカルーセルを表示することを前提としています。 選択した動画は自動的に再生されますが、ユーザーはカルーセルをどちらの方向にでもスクロールできます。これにより、再生中の動画が停止し、スクロールした動画が開始されます。

これらの手順については、次のページで詳しく説明します。

  1. アプリは ターゲット プリロード ステータス制御を作成します。プリロード マネージャーは、このコントロールにクエリを実行して、読み込む各メディア アイテムの量を確認します。
  2. アプリは DefaultPreloadManager.Builder を作成し、ターゲット プリロード ステータス制御を渡します。次に、アプリはこのビルダーを使用してプリロード マネージャーを作成します。
  3. アプリはメディア アイテムをプリロード マネージャーに追加します。アプリは各アイテムのインデックスを提供し、カルーセル内のアイテムの位置を指定します。
  4. すべてのメディアが追加されたら、アプリは invalidate() を呼び出して、 各アイテムの優先度を設定してからプリロードするようにプリロード マネージャーに指示します。
  5. プリロード マネージャーは、各メディア アイテムに対してターゲット プリロード コントロールを呼び出し、読み込むアイテムの量を確認します。ターゲット プリロード コントロールは、特定の期間のコンテンツを読み込む、アイテムのメタデータのみを取得する、現時点ではそのアイテムを取得しない、などの指示を出すことがあります。プリロード マネージャーがこの情報を取得すると、メディア コンテンツの読み込みを開始します。
  6. ユーザーがコンテンツの再生を開始すると、アプリはプリロード マネージャーを呼び出して そのメディア アイテムの MediaSource をリクエストします。アプリは setCurrentPlayingIndex() も呼び出して、再生中のメディア アイテムをプリロード マネージャーに伝えます。
  7. ユーザーが別のメディア アイテムに移動すると、アプリはそのアイテムをプリロード マネージャーにリクエストし、現在の再生インデックスも更新します。次に、invalidate() を再度呼び出して、現在再生中のコンテンツに基づいて優先度を更新するようにプリロード マネージャーに指示します。
  8. アプリがカルーセルにメディア アイテムを追加または削除する場合は、それらのアイテムをプリロード マネージャーに追加または削除し、完了したら invalidate() を呼び出します。
  9. プリロード マネージャーの優先度が無効になるたびに、ターゲット プリロード コントロールを再度呼び出して、読み込む各アイテムの量を確認します。
  10. アプリがカルーセルを閉じると、プリロード マネージャーを解放してリソースを 解放します。