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ęsto w mediach społecznościowych 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 odpowiednią ilość z wyprzedzeniem.

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żnisz po pierwszym dodaniu elementów multimedialnych, a także 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, informowanie go o ilości treści do wstępnego wczytania 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.

  • Zwolnij menedżera wstępnego wczytywania, gdy skończysz z niego korzystać, aby zwolnić jego zasoby.

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

  • Śledzi wszystkie elementy multimedialne dodane do niego przez 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 każdego elementu multimedialnego należy wczytać.
  • Po wysłaniu zapytania do aplikacji wstępnie wczytuje odpowiednią ilość każdego elementu multimedialnego. Menedżer wstępnego wczytywania decyduje o kolejności wczytywania elementów. Priorytetowo traktuje elementy, które są najbliższe elementowi, 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 odtwarzania aktualnego 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ć, jaka część elementu powinna zostać wczytana. W przypadku docelowego sterowania wstępnym wczytywaniem może być konieczne wczytanie treści o określonym czasie trwania, pobranie metadanych elementu lub niepobieranie w tym momencie żadnych informacji o tym elemencie. Gdy menedżer wstępnego wczytywania otrzyma te informacje, rozpocznie wczytywanie treści multimedialnych.
  6. Gdy użytkownik zacznie odtwarzać 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 aktualnie odtwarzanych treści.
  8. Jeśli aplikacja dodaje lub usuwa elementy multimedialne z karuzeli, dodaje je też do menedżera wstępnego wczytywania lub z niego usuwa, a po zakończeniu tej czynności wywołuje funkcję invalidate().
  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 zamknie karuzelę, zwalnia menedżera wstępnego wczytywania, aby zwolnić jego zasoby.