Koncepcje menedżera wstępnego wczytywania

Menedżer wstępnego wczytywania pomaga zapewnić użytkownikom lepsze wrażenia, ponieważ szybciej wyświetla treści i skraca czas oczekiwania podczas przełączania się między poszczególnymi elementami. Umożliwia też dostosowanie czasu trwania i rankingu wstępnego wczytywania poszczególnych elementów.

Częstym przypadkiem w mediach społecznościowych jest sytuacja, w której aplikacja wyświetla użytkownikowi listę lub karuzelę opcji multimedialnych. Na przykład aplikacja może wyświetlać karuzelę krótkich filmów. Gdy jeden film się skończy, aplikacja przełączy się na następny. Jeśli użytkownikowi nie spodoba się oglądany film, może przesunąć palcem, aby przejść do następnego lub poprzedniego filmu.

Jeśli nie wstępnie wczytasz treści wideo, może to być uciążliwe dla użytkowników. Użytkownik kończy odtwarzanie jednego pliku multimedialnego i musi poczekać na załadowanie kolejnego.

Z drugiej strony, jeśli wstępne wczytywanie treści jest zbyt agresywne, marnuje energię i przepustowość sieci na wczytywanie treści, których użytkownik może nigdy nie odtworzyć.

DefaultPreloadManager pomaga aplikacji zachować równowagę między tymi kwestiami. Menedżer wstępnego wczytywania współpracuje z aplikacją, aby określić, jak ważny jest każdy element multimedialny, i wczytuje z wyprzedzeniem odpowiednią ilość danych.

Podział pracy

Jeśli używasz DefaultPreloadManager, część pracy wykonuje Twój kod, a część – menedżer wstępnego wczytywania.

Aplikacja musi:

  • Utwórz obiekty ExoPlayer aplikacji, używając tego samego obiektu DefaultPreloadManager.Builder, którego używasz do tworzenia menedżera wstępnego wczytywania. Zadzwoń pod numer DefaultPreloadManager.Builder.buildExoPlayer(), aby utworzyć ExoPlayer.
  • Poinformuj menedżera wstępnego wczytywania o każdym elemencie multimedialnym, który ma śledzić. Nie musi to być cała zawartość karuzeli. Możesz poinformować o kilku pierwszych elementach do odtworzenia. Gdy użytkownik przegląda karuzelę, możesz dodawać i usuwać elementy multimedialne z puli menedżera wstępnego wczytywania.
  • Unieważnij priorytety w menedżerze wstępnego wczytywania, gdy zmieni się zawartość karuzeli lub użytkownik zmieni odtwarzany element. Ta funkcja nakazuje menedżerowi wstępnego wczytywania ponowne określenie priorytetu każdego elementu multimedialnego i wczytanie treści, jeśli jest to konieczne. Menedżera wstępnego wczytywania unieważniasz po pierwszym dodaniu elementów multimedialnych, a także wtedy, gdy użytkownik przechodzi z jednego elementu do drugiego lub gdy dodajesz lub usuwasz elementy z karuzeli.
  • Odpowiadanie na zapytania menedżera wstępnego wczytywania, informując go, ile treści ma wstępnie wczytać dla każdego elementu.
  • Pobieraj multimedia z menedżera wstępnego wczytywania, gdy użytkownik rozpoczyna odtwarzanie elementu. Menedżer wstępnego wczytywania przyznaje aplikacji MediaSource za te treści.

  • Gdy skończysz korzystać z menedżera wstępnego wczytywania, zwolnij go, aby uwolnić jego zasoby.

Menedżer wstępnego wczytywania wykonuje te czynności:

  • Śledzi wszystkie multimedia dodane do niej przez Twoją aplikację.
  • Za każdym razem, gdy priorytety są unieważniane, wysyła do aplikacji zapytanie, wywołując zaimplementowaną przez nią funkcję TargetPreloadStatusControl. Wywołuje ją, aby dowiedzieć się, ile poszczególnych elementów multimedialnych należy wczytać.
  • Po wysłaniu zapytania do aplikacji wstępnie wczytuje odpowiednią liczbę każdego elementu multimedialnego. Menedżer wstępnego wczytywania decyduje o kolejności wczytywania elementów. Priorytetowo traktuje elementy, które są najbardziej podobne do elementu, w który gra użytkownik.
  • Gdy aplikacja zażąda treści, menedżer wstępnego wczytywania udostępni MediaSource wszystkie wczytane już treści.

Przepływ pracy menedżera wstępnego wczytywania

W tej sekcji opisujemy typowy proces w przypadku aplikacji, która korzysta z menedżera wstępnego wczytywania. W tym przykładzie zakładamy, że aplikacja wyświetla karuzelę krótkich filmów. Wybrany film odtwarza się automatycznie, ale użytkownik może przewijać karuzelę w dowolnym kierunku. Spowoduje to zatrzymanie odtwarzanego filmu i włączenie filmu, do którego przewinie karuzelę.

Wszystkie te kroki zostały szczegółowo omówione na kolejnych stronach.

  1. Aplikacja tworzy element sterujący stanem wstępnego wczytywania. Menedżer wstępnego wczytywania wysyła zapytanie do tego elementu sterującego, aby dowiedzieć się, ile każdego elementu multimedialnego należy wczytać.
  2. Aplikacja tworzy DefaultPreloadManager.Builder i przekazuje kontrolę stanu wstępnego wczytywania do miejsca docelowego. Aplikacja używa następnie kreatora do utworzenia menedżera wstępnego wczytywania.
  3. Aplikacja dodaje elementy multimedialne do menedżera wstępnego wczytywania. Aplikacja podaje indeks każdego elementu, określając jego pozycję w karuzeli.
  4. Po dodaniu wszystkich multimediów aplikacja wywołuje funkcję invalidate(), aby poinformować menedżera wstępnego wczytywania o konieczności ustawienia priorytetów dla poszczególnych elementów, a następnie wstępnego wczytania tych elementów.
  5. W przypadku każdego elementu multimedialnego menedżer wstępnego wczytywania wywołuje docelowy element sterujący wstępnym wczytywaniem, aby sprawdzić, ile elementu należy wczytać. Docelowy element sterujący wstępnym wczytywaniem może nakazywać wczytanie treści o określonym czasie trwania, pobranie tylko metadanych elementu lub niepobieranie w tym momencie żadnych danych tego elementu. Gdy menedżer wstępnego wczytywania otrzyma te informacje, rozpocznie wczytywanie treści multimedialnych.
  6. Gdy użytkownik rozpocznie odtwarzanie treści, aplikacja wywoła menedżera wstępnego wczytywania, aby poprosić o MediaSource dla tego elementu multimedialnego. Aplikacja wywołuje też funkcję setCurrentPlayingIndex(), aby poinformować menedżera wstępnego wczytywania, który element multimedialny jest odtwarzany.
  7. Jeśli użytkownik przejdzie do innego elementu multimedialnego, aplikacja poprosi o ten element menedżera wstępnego wczytywania, a także zaktualizuje bieżący indeks odtwarzania. Następnie ponownie wywołuje funkcję invalidate(), aby poinformować menedżera wstępnego wczytywania o konieczności zaktualizowania priorytetów na podstawie tego, co jest obecnie odtwarzane.
  8. Jeśli aplikacja dodaje lub usuwa elementy multimedialne z karuzeli, dodaje lub usuwa je też z menedżera wstępnego wczytywania i wywołuje funkcję invalidate() po zakończeniu tej czynności.
  9. Gdy priorytety menedżera wstępnego wczytywania zostaną unieważnione, ponownie wywołuje on docelowy element sterujący wstępnym wczytywaniem, aby dowiedzieć się, ile każdego elementu należy wczytać.
  10. Gdy aplikacja zamyka karuzelę, zwalnia menedżera wstępnego wczytywania, aby zwolnić jego zasoby.