Android DownloaderManager
это системная служба. Предполагается, что он работает всегда. Но есть случаи, когда он не может работать.
Загрузка происходит через постоянное соединение HTTP. Это означает, что одно и то же установленное соединение используется для последовательного HTTP-запроса/ответа. Ошибка соединения означает, что происходит ошибка, и, таким образом, вы не можете отслеживать статус по идентификатору ссылки.
Вы отслеживаете через Android DownloadManager
сервис, где Android DownloadManager
service получает STATUS
код с сервера.
Android DownloadManager использует загрузку content-length
с сервера. Заголовка не разрешает потоковую передачу (link). Загрузка на основе длины контента имеет преимущество возобновления, паузы, частичной загрузки - см. Ссылку1 выше. Таким образом, даже когда вы перезагружаете систему, она снова перезапускает (увеличивает) загрузку.
content-length
основано скачать store and forward
(link). Вы должны пересылать буферный контент в постоянное хранилище, потому что у вас ограниченные фиксированные буферы.
Android DownloadManager
имеет ERROR_CANNOT_RESUME int
флаг (link). ERROR_CANNOT_RESUME
основан на флагом COLUMN_STATUS
. Существует два типа СОСТОЯНИЯ КОЛОННЫ: STATUS_PAUSED
или STATUS_FAILED
. Перед отключением системы система через BroadcastReceiver
отправляет Android DownloadManager
сервис об отключении. Затем Android DownloadManager
активирует флаг STATUS_PAUSED
. И когда в следующий раз при перезагрузке устройства системная служба запускается автоматически, проверяет, запускает ли STATUS_PAUSED снова загрузку.
Ответ: так, пока не произойдет ошибка (в стороне клиента, подключение или на стороне сервера), или вы не сделали загрузку файла (это не означает, что до тех пор, STATUS_SUCCESSFUL
), вы продолжаете получать статус от Android DownloadManager
. Вы не можете получить статус, когда произойдет STATUS_FAILED
- он говорит, что загрузка не будет повторена (link).
Как происходит STATUS_FAILED
?DownloadManager
служба клиента определяет код статуса HTTP 4xx (сервер угадывает клиент допустил ошибку) и в 5XX (Server обнаруживает сервер допустил ошибку) (link), теперь STATUS_FAILED
становится истинным.
Некоторых других ситуации: Когда клиенты постоянно выключенный и на основе серверной логики, сервер может разорвать соединение с тайм-аутом. Таким образом, этот элемент управления явно основан на разных HTTP-серверах. Мы не можем просить эти много дней здесь. Мы не знаем логики на стороне сервера. Статусные коды основаны на сервере. Когда сервер решает, что клиент потерпел неудачу, а затем сервер timeout
делает подключение STATUS_FAILED
активным на стороне сервера. клиенты должны быть готовы к тому, что соединения TCP исчезнут в произвольные моменты времени и должны иметь возможность восстановить соединение и повторить запрос HTTP. Преждевременно закрытое соединение не должно рассматриваться как ошибка; ошибка будет указана только в случае сбоя попытки восстановить соединение. Ваш вопрос не имеет точного ответа.
Примечание: TCP connections to disappear at arbitrary times
(link) является основным логика, которая может возобновить соединение после определенного количества дней вашего устройства выключенными.
1) В STATUS_FAILED
вы не сможете продолжить отслеживать дальнейшие данные.
2) Вкл. Если COLUMN_STATUS
не является ни STATUS_FAILED
, ни STATUS_PAUSED
, значение этого столбца не определено, здесь вы не сможете отслеживать дальнейшие данные.
- Все, кроме двух вышеуказанных условий, выполняется загрузка.
У меня такой же вопрос ... я предполагаю, что данные будут доступны до тех пор, пока пользователь не удалит загрузку из приложения Download Manager (долгое нажатие и удаление). – daramasala