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 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żniaj priorytety w menedżerze wstępnego wczytywania, gdy zmienia się zawartość karuzeli lub użytkownik zmienia odtwarzany element. Ta funkcja informuje menedżera wstępnego wczytywania, aby ponownie określił priorytet każdego elementu multimedialnego i wczytał treści, jeśli to konieczne. Menedżera wstępnego wczytywania unieważniasz 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.
  • Odpowiadaj na zapytania menedżera wstępnego wczytywania, informując go, ile treści ma wstępnie wczytać w przypadku 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ą 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 pracy 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, który określa jego pozycję w karuzeli.
  4. Po dodaniu wszystkich multimediów aplikacja wywołuje invalidate(), aby poinformować menedżera wstępnego wczytywania o ustawieniu priorytetów dla każdego elementu, a następnie wstępnie wczytać te elementy.
  5. W przypadku każdego elementu multimedialnego menedżer wstępnego wczytywania wywołuje docelowy element sterujący wstępnym wczytywaniem, aby sprawdzić, ile danych elementu powinno zostać wczytanych. Docelowy element sterujący wstępnym wczytywaniem może nakazywać wczytanie treści o określonym czasie trwania, pobranie tylko metadanych elementu lub niepobieranie tego elementu w danym momencie. 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 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.