Основные понятия, связанные с менеджером предзагрузки

Менеджер предварительной загрузки позволяет повысить удобство для пользователей, ускоряя показ контента и сокращая время ожидания при переходе от одного элемента к другому. Вы также можете настроить продолжительность и рейтинг предварительной загрузки для каждого элемента.

В социальных сетях часто встречается ситуация, когда приложение показывает пользователю список или карусель медиафайлов. Например, в приложении может показываться карусель коротких видео. Когда одно видео заканчивается, приложение переключается на следующее. Если пользователю не нравится видео, он может перейти к следующему или предыдущему.

Если вы не настроите предварительную загрузку видеоконтента, это может негативно сказаться на удобстве работы пользователей. Пользователь закончил просмотр одного медиафайла и ждет, пока загрузится следующий.

С другой стороны, если вы будете предварительно загружать контент слишком агрессивно, это приведет к потере мощности и пропускной способности сети при загрузке контента, который пользователь может никогда не воспроизвести.

DefaultPreloadManager помогает найти баланс между этими факторами. Менеджер предварительной загрузки работает с вашим приложением, чтобы определить, насколько важен каждый мультимедийный объект, и заранее загружает соответствующий объем.

Разделение труда

Если вы используете DefaultPreloadManager, часть работы выполняется вашим кодом, а часть – менеджером предварительной загрузки.

Приложение должно выполнять следующие действия:

Менеджер предварительной загрузки выполняет следующие действия:

  • В нем отслеживаются все мультимедийные объекты, добавленные вашим приложением.
  • Каждый раз, когда приоритеты обновляются, система запрашивает у приложения, какую часть каждого мультимедийного объекта нужно загрузить, вызывая метод TargetPreloadStatusControl.
  • После запроса к приложению он предварительно загружает соответствующее количество каждого мультимедийного объекта. Менеджер предварительной загрузки определяет, в каком порядке загружать элементы. В первую очередь предлагаются объекты, наиболее близкие к тому, который пользователь воспроизводит в данный момент.
  • Когда приложение запрашивает контент, менеджер предзагрузки предоставляет объект MediaSource с уже загруженным контентом.

Рабочий процесс менеджера предзагрузки

В этом разделе описывается типичный рабочий процесс для приложения, использующего менеджер предварительной загрузки. В этом примере мы предполагаем, что в приложении показывается карусель коротких видео. Выбранное видео воспроизводится автоматически, но пользователь может прокручивать карусель в любом направлении. При этом воспроизведение текущего видео останавливается и начинается воспроизведение видео, к которому пользователь перешел.

Все эти шаги подробно описаны на следующих страницах.

  1. Приложение создает элемент управления статусом предварительной загрузки. Менеджер предварительной загрузки запрашивает у этого элемента управления информацию о том, какую часть каждого мультимедийного объекта нужно загрузить.
  2. Приложение создает объект DefaultPreloadManager.Builder и передает целевой статус управления предзагрузкой. Затем приложение использует конструктор для создания менеджера предзагрузки.
  3. Приложение добавляет мультимедийные объекты в менеджер предзагрузки. Приложение предоставляет индекс для каждого элемента, указывающий его положение в карусели.
  4. Для каждого мультимедийного объекта менеджер предварительной загрузки вызывает целевой элемент управления предварительной загрузкой, чтобы запросить, какую часть объекта следует загрузить. В настройках предварительной загрузки можно указать, что нужно загрузить контент определенной продолжительности, получить только метаданные объекта или не загружать ничего. После того как менеджер предварительной загрузки получит эту информацию, он начнет загружать медиаконтент.
  5. Когда пользователь начинает воспроизведение контента, приложение вызывает менеджер предварительной загрузки, чтобы запросить MediaSource для этого мультимедийного объекта. Приложение также вызывает setCurrentPlayingIndex(), чтобы сообщить менеджеру предзагрузки, какой мультимедийный объект воспроизводится, и обновить приоритеты мультимедийных объектов.
  6. При каждом обновлении приоритетов менеджер предзагрузки снова вызывает целевой элемент управления предзагрузкой, чтобы узнать, сколько элементов каждого типа нужно загрузить.
  7. Когда приложение закрывает карусель, оно освобождает менеджер предзагрузки, чтобы освободить его ресурсы.