Menedżer wstępnego wczytywania pomaga zapewnić użytkownikom lepsze wrażenia, ponieważ szybciej wyświetla treści i skraca czas oczekiwania, gdy użytkownicy przełączają się między elementami. Umożliwia też dostosowanie czasu trwania i rankingu wstępnego wczytywania poszczególnych elementów.
W mediach społecznościowych często zdarza się, że aplikacja wyświetla użytkownikowi listę lub karuzelę z opcjami multimedialnymi. Aplikacja może na przykład wyświetlać karuzelę z krótkimi filmami. Gdy jeden film się skończy, aplikacja przełączy się na następny. Jeśli użytkownikowi nie podoba się oglądany film, może przesunąć palcem, aby przejść do następnego lub poprzedniego filmu.
Jeśli nie wczytasz wstępnie treści wideo, może to spowodować frustrację użytkowników. Użytkownik kończy oglądanie treści i musi czekać na wczytanie kolejnej.
Z drugiej strony, jeśli wczytasz wstępnie zbyt dużo treści, spowoduje to zużycie energii i przepustowości sieci na wczytywanie treści, których użytkownik może nigdy nie odtworzyć.
DefaultPreloadManager pomaga aplikacji zrównoważyć te kwestie. Menedżer wstępnego wczytywania współpracuje z aplikacją, aby określić, jak ważny jest każdy element multimedialny, i wczytuje odpowiednią ilość treści z wyprzedzeniem.
Podział pracy
Jeśli używasz DefaultPreloadManager, część pracy wykonuje Twój kod, a część – menedżer wstępnego wczytywania.
Twoja aplikacja musi wykonać te czynności:
- Utwórz obiekty
ExoPlayeraplikacji, używając tego samego obiektuDefaultPreloadManager.Builder, którego używasz do tworzenia menedżera wstępnego wczytywania. Aby utworzyćExoPlayer, wywołajDefaultPreloadManager.Builder.buildExoPlayer(). - Poinformuj menedżera wstępnego wczytywania o każdym elemencie multimedialnym, który ma śledzić. Nie muszą to być wszystkie treści w karuzeli. Możesz poinformować go tylko o kilku pierwszych elementach, które mają być odtwarzane. Gdy użytkownik porusza się po karuzeli, 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ść w karuzeli lub użytkownik zmieni odtwarzany element. Dzięki temu menedżer wstępnego wczytywania ponownie określi priorytet każdego elementu multimedialnego i w razie potrzeby wczyta treści. Unieważnisz menedżera wstępnego wczytywania po pierwszym dodaniu elementów multimedialnych, a także wtedy, gdy użytkownik przejdzie z jednego elementu do drugiego lub gdy dodasz lub usuniesz elementy z karuzeli.
- Odpowiadaj na zapytania menedżera wstępnego wczytywania, informując go, ile treści ma wczytać wstępnie dla każdego elementu.
Pobieraj multimedia z menedżera wstępnego wczytywania, gdy użytkownik zacznie odtwarzać element. Menedżer wstępnego wczytywania udostępnia aplikacji
MediaSourcedla tych treści.Gdy skończysz korzystać z menedżera wstępnego wczytywania, zwolnij go, 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 jego priorytety zostaną unieważnione, wysyła zapytanie do aplikacji, wywołując a
TargetPreloadStatusControlzaimplementowany przez aplikację. Wywołuje go, aby dowiedzieć się ile każdego elementu multimedialnego ma wczytać. - Po wysłaniu zapytania do aplikacji wczytuje wstępnie 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żej elementu odtwarzanego przez użytkownika.
- Gdy aplikacja zażąda treści, menedżer wstępnego wczytywania udostępni
MediaSourcez już wczytanymi treściami.
Przebieg pracy menedżera wstępnego wczytywania
W tej sekcji opisujemy typowy przebieg pracy aplikacji, która korzysta z menedżera wstępnego wczytywania. W tym przykładzie zakładamy, że aplikacja wyświetla karuzelę z krótkimi filmami. Wybrany film odtwarza się automatycznie, ale użytkownik może przewijać karuzelę w dowolnym kierunku. Spowoduje to zatrzymanie odtwarzanego filmu i rozpoczęcie odtwarzania filmu, do którego użytkownik przewinie.
Wszystkie te kroki są szczegółowo omówione na kolejnych stronach.
- Aplikacja tworzy kontrolę stanu wstępnego wczytywania docelowego. Menedżer wstępnego wczytywania wysyła zapytanie do tej kontroli, aby dowiedzieć się, ile każdego elementu multimedialnego ma wczytać.
- Aplikacja tworzy
DefaultPreloadManager.Builderi przekazuje kontrolę stanu wstępnego wczytywania docelowego. Następnie aplikacja używa narzędzia do tworzenia, aby utworzyć menedżera wstępnego wczytywania. - Aplikacja dodaje elementy multimedialne do menedżera wstępnego wczytywania. Aplikacja podaje indeks każdego elementu, określając jego pozycję w karuzeli.
- Po dodaniu wszystkich multimediów aplikacja wywołuje
invalidate(), aby poinformować menedżera wstępnego wczytywania, że ma ustawić priorytety dla każdego elementu, a następnie wczytać je wstępnie. - W przypadku każdego elementu multimedialnego menedżer wstępnego wczytywania wywołuje kontrolę wstępnego wczytywania docelowego, aby sprawdzić, ile elementu ma zostać wczytane. Kontrola wstępnego wczytywania docelowego może wskazywać, że należy wczytać określoną ilość treści, pobrać tylko metadane elementu lub w tym momencie nie pobierać żadnych danych tego elementu. Gdy menedżer wstępnego wczytywania otrzyma te informacje, zacznie wczytywać treści multimedialne.
- Gdy użytkownik zacznie odtwarzać treści, aplikacja wywoła menedżera wstępnego wczytywania
aby poprosić o
MediaSourcedla tego elementu multimedialnego. Aplikacja wywołuje teżsetCurrentPlayingIndex(), aby poinformować menedżera wstępnego wczytywania, który element multimedialny jest odtwarzany. - Jeśli użytkownik przejdzie do innego elementu multimedialnego, aplikacja poprosi o ten element menedżera wstępnego wczytywania i zaktualizuje bieżący indeks odtwarzania. Następnie ponownie wywoła
invalidate(), aby poinformować menedżera wstępnego wczytywania, że ma zaktualizować priorytety na podstawie tego, co jest teraz odtwarzane. - Jeśli aplikacja dodaje lub usuwa elementy multimedialne z karuzeli, dodaje lub usuwa te elementy również z menedżera wstępnego wczytywania i po zakończeniu tej czynności wywołuje
invalidate(). - Za każdym razem, gdy priorytety menedżera wstępnego wczytywania zostaną unieważnione, wywołuje on ponownie kontrolę wstępnego wczytywania docelowego, aby dowiedzieć się, ile każdego elementu ma wczytać.
- Gdy aplikacja zamknie karuzelę, zwolni menedżera wstępnego wczytywania, aby zwolnić jego zasoby.