15

У меня есть прецедент, гдеДо тех пор, пока менеджер загрузки Android не получит статус загрузки, скачав ссылку Id?

Я начал загрузку файла с помощью диспетчера загрузки Android, а в середине отключил мобильный. Когда я снова перезагрузился, загрузка продолжится и завершится. Я получил статус, указав идентификатор ссылки загрузки. Но я хотел бы узнать статус даже через 10 дней, используя этот идентификатор ссылки.

Так что мой вопрос в том, когда андроид менеджер закачек даст статус загрузки, загрузив ссылку Id?

Я просмотрел документацию и прошел через стек над потоком, но не смог найти ответ. Кто-то мне помогает.

+0

У меня такой же вопрос ... я предполагаю, что данные будут доступны до тех пор, пока пользователь не удалит загрузку из приложения Download Manager (долгое нажатие и удаление). – daramasala

ответ

1

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, значение этого столбца не определено, здесь вы не сможете отслеживать дальнейшие данные.

- Все, кроме двух вышеуказанных условий, выполняется загрузка.

+0

@Gautam Спасибо за ответ, я не получил ответа полностью. Мой вопрос: подумайте, что я начал загрузку и имел идентификатор ссылки загрузки, теперь статус может стать STATUS_FAILED, STATUS_PAUSED, STATUS_SUCCESSFUL или что бы ни случилось. Теперь, до каких дней или месяцев, система андроида даст статус для данного идентификатора ссылки загрузки? –

+0

@ Сан, я прошу прощения, я понял сейчас. Эти идентификаторы постоянно переопределяются при каждой загрузке. Когда статус успешно завершен, теперь весь процесс становится частью GC, Garbage Collection, которая на основе вашей системы удаляет эти переменные позже. –

+0

То же самое, что и при разрыве соединения.Как только соединение терпит неудачу (я не говорю о преждевременном сбое - прочитайте ответ еще раз), это означает, что навсегда. Вы не можете снова установить такое же соединение. Теперь, снова, вся операция кучи заботится GC. –

-2

Вы можете использовать SharedPreferences для хранения идентификатора ссылки для скачивания. Что-то вроде этого -

SharedPreferences settings = getSharedPreferences("DownloadIDS", 0); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putLong("downloadIds", downloadID); 
editor.commit(); 

Вы можете получить идентификатор позже при использовании этого

SharedPreferences downloadids = context.getSharedPreferences("DownloadIDS", 0); 
long savedDownloadIds = downloadids.getLong("downloadIds", 0); 
+0

Спасибо за ответ. Здесь мой вопрос не о сохранении ссылки на скачивание. Мой вопрос касается до тех пор, пока система андроидов не даст статус для заданного идентификатора ссылки на скачивание? –

+1

Пожалуйста, сосредоточьтесь на вопросе «Итак, мой вопрос до тех пор, пока менеджер загрузки Android не предоставит статус загрузки по ссылке download Id?' ​​ –

+0

Я понимаю вопрос. Но я даю обходное решение, которое решает проблему OP по-другому. Я не думаю, что это заслуживает внимания. –

 Смежные вопросы

  • Нет связанных вопросов^_^