プリロード マネージャーを使用すると、ユーザーがアイテムを切り替える際の待ち時間を短縮し、コンテンツをより迅速に提供することで、ユーザー エクスペリエンスを向上させることができます。また、アイテムごとにプリロードの期間とランキングをカスタマイズすることもできます。
ソーシャル メディアでは、アプリがメディアの選択肢のリストやカルーセルをユーザーに表示することがよくあります。たとえば、アプリがショート動画のカルーセルを表示することがあります。1 つの動画が終了すると、アプリは次の動画に切り替わります。また、ユーザーが視聴している動画を気に入らない場合は、スワイプして次の動画や前の動画に移動することがあります。
動画コンテンツをプリロードしないと、ユーザー エクスペリエンスが低下する可能性があります。ユーザーがメディアを視聴し終えてから、次のメディアが読み込まれるまで待たなければならないからです。
一方、コンテンツを過度にプリロードすると、ユーザーが実際に再生しない可能性のあるコンテンツを読み込むために、電力とネットワーク帯域幅が無駄になります。
DefaultPreloadManager を使用すると、アプリでこれらの懸念事項のバランスを取ることができます。プリロード
マネージャーはアプリと連携して、各メディア アイテムの重要度を判断し、適切な量を事前に読み込みます。
分業
DefaultPreloadManager を使用する場合、一部の作業はコードによって行われ、一部の作業はプリロード
マネージャーによって行われます。
アプリは次のことを行う必要があります。
- プリロード マネージャーの作成に使用するのと同じ
DefaultPreloadManager.Builderオブジェクトを使用して、アプリのExoPlayerオブジェクトを作成します。DefaultPreloadManager.Builder.buildExoPlayer()を呼び出してExoPlayerを作成します。 - 追跡する各メディア アイテムについてプリロード マネージャーに通知します。 これは、カルーセル内のすべてのコンテンツではない可能性があります。代わりに、再生する最初の数個のアイテムについてのみ通知できます。ユーザーがカルーセルを操作すると、プリロード マネージャーのプールからメディア アイテムを追加および削除できます。
- カルーセル内のコンテンツが変更された場合、またはユーザーが再生するアイテムを変更した場合は、プリロード マネージャーの優先度を無効にします。 これにより、プリロード マネージャーは各メディア アイテムの優先度を再決定し、必要に応じてコンテンツを読み込みます。プリロード マネージャーは、最初にメディア アイテムを追加した後、ユーザーがアイテム間を移動したとき、またはカルーセルにアイテムを追加または削除したときに無効になります。
- プリロード マネージャーからのクエリに応答し、各アイテムに対してプリロードするコンテンツの量をマネージャーに伝えます。
ユーザーがアイテムの再生を開始したら、プリロード マネージャーからメディアを取得します。プリロード マネージャーは、そのコンテンツの
MediaSourceをアプリに提供します。プリロード マネージャーの使用が終了したら、プリロード マネージャーを解放してリソースを解放します。
プリロード マネージャーは次の処理を行います。
- アプリに追加したすべてのメディア アイテムを追跡します。
- 優先度が無効になるたびに、アプリによって実装された
TargetPreloadStatusControlを呼び出して、アプリにクエリを実行します。これにより、 読み込む各メディア アイテムの量を把握します。 - アプリにクエリを実行した後、各メディア アイテムの適切な量をプリロードします。プリロード マネージャーは、アイテムを読み込む順序を決定します。ユーザーが再生しているアイテムに最も近いアイテムを優先します。
- アプリがコンテンツをリクエストすると、プリロード マネージャーは、すでに読み込まれているコンテンツを含む
MediaSourceを提供します。
プリロード マネージャーのワークフロー
このセクションでは、プリロード マネージャーを使用するアプリの一般的なワークフローについて説明します。この例では、アプリが短い動画のカルーセルを表示することを前提としています。 選択した動画は自動的に再生されますが、ユーザーはカルーセルをどちらの方向にでもスクロールできます。これにより、再生中の動画が停止し、スクロールした動画が開始されます。
これらの手順については、次のページで詳しく説明します。
- アプリは ターゲット プリロード ステータス制御を作成します。プリロード マネージャーは、このコントロールにクエリを実行して、読み込む各メディア アイテムの量を確認します。
- アプリは
DefaultPreloadManager.Builderを作成し、ターゲット プリロード ステータス制御を渡します。次に、アプリはこのビルダーを使用してプリロード マネージャーを作成します。 - アプリはメディア アイテムをプリロード マネージャーに追加します。アプリは各アイテムのインデックスを提供し、カルーセル内のアイテムの位置を指定します。
- すべてのメディアが追加されたら、アプリは
invalidate()を呼び出して、 各アイテムの優先度を設定してからプリロードするようにプリロード マネージャーに指示します。 - プリロード マネージャーは、各メディア アイテムに対してターゲット プリロード コントロールを呼び出し、読み込むアイテムの量を確認します。ターゲット プリロード コントロールは、特定の期間のコンテンツを読み込む、アイテムのメタデータのみを取得する、現時点ではそのアイテムを取得しない、などの指示を出すことがあります。プリロード マネージャーがこの情報を取得すると、メディア コンテンツの読み込みを開始します。
- ユーザーがコンテンツの再生を開始すると、アプリはプリロード マネージャーを呼び出して
そのメディア アイテムの
MediaSourceをリクエストします。アプリはsetCurrentPlayingIndex()も呼び出して、再生中のメディア アイテムをプリロード マネージャーに伝えます。 - ユーザーが別のメディア アイテムに移動すると、アプリはそのアイテムをプリロード マネージャーにリクエストし、現在の再生インデックスも更新します。次に、
invalidate()を再度呼び出して、現在再生中のコンテンツに基づいて優先度を更新するようにプリロード マネージャーに指示します。 - アプリがカルーセルにメディア アイテムを追加または削除する場合は、それらのアイテムをプリロード マネージャーに追加または削除し、完了したら
invalidate()を呼び出します。 - プリロード マネージャーの優先度が無効になるたびに、ターゲット プリロード コントロールを再度呼び出して、読み込む各アイテムの量を確認します。
- アプリがカルーセルを閉じると、プリロード マネージャーを解放してリソースを 解放します。