Android: загрузка мультимедиа с url-адреса

#android #kotlin #download #background-process

#Android #kotlin #Скачать #фоновый процесс

Вопрос:

Каков современный (2019) подход к загрузке мультимедиа (изображений, видео, аудио и т. Д.) С URL-адреса с помощью Kotlin?

По-видимому, существует множество различных механизмов, которые вы можете использовать с точки зрения фоновой выборки:

  • Service
  • JobService
  • IntentService
  • JobScheduler
  • BroadcastReceiver
  • AsyncTask
  • DownloadManager
  • PoolExecutor s
  • А также любая возможная комбинация этих и, возможно, других, даже не перечисленных здесь…

Я мог бы найти по крайней мере 1 пример почти для каждого элемента в приведенном выше списке, однако я не смог найти «стандартный», «рекомендуемый» или «официальный» подход ни от Google, ни от сообщества разработчиков Android.

(Не прошу здесь серебряной пули, просто интересно, какой самый или некоторые из наиболее последовательных и, конечно, современных способов решения такой общей задачи)

Комментарии:

1. Контекст: приложение для мультимедийного проигрывателя Android

2. Ваш контекст на самом деле не имеет значения. Когда происходят эти загрузки в отношении работы вашего приложения? И что является триггером для этих загрузок (взаимодействие пользователя с пользовательским интерфейсом? push-сообщение? опрос службы подкастов? что-то еще?)

3. Загрузки запускаются автоматически с помощью push-сообщений, если доступно подключение к wlan, в противном случае пользователь должен иметь возможность запускать их вручную через пользовательский интерфейс, а также приостанавливать / отменять их.

Ответ №1:

Сервис самый быстрый — вы можете сразу загрузить столько, сколько нужно. Вам нужно будет поднять его на передний план (с помощью липкого уведомления), чтобы запустить и / или поддерживать его, когда ваше приложение не находится на переднем плане.

JobScheduler JobService менее навязчив, но время его выполнения управляется системой, поэтому он не подходит для немедленного запроса. Однако вы можете запланировать его периодический запуск, чтобы проверить, есть ли что-то новое для загрузки.

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