Подтвердить что ты не робот

DownloadManager - понимание ERROR_HTTP_DATA_ERROR

Мое приложение сильно зависит от компонента android DownloadManager для загрузки файлов с приблизительным размером 3-10 мегабайт.

при масштабировании (до миллионов загрузок) большая картина понятна:

~ 50% всех загрузок не работают из-за ERROR_HTTP_DATA_ERROR.

Я получаю эту информацию из Google Analytics

в соответствии с документацией, этот код ошибки означает:

Значение COLUMN_REASON, когда ошибка при получении или обработке данных произошла на уровне HTTP.

Я нашел эту документацию не очень информативной.
есть много ошибок HTTP.

и как насчет отключения сети в середине загрузки? вызывает ли это также ошибку ERROR_HTTP_DATA_ERROR после отказа от попыток повторной попытки диспетчера загрузки?

Было бы здорово, если бы кто-то помог мне понять:

  • есть ли способ получить от DownloadManager больше информации о точной ошибке HTTP?
  • Каковы наиболее распространенные ситуации ERROR_HTTP_DATA_ERROR могут быть запущены менеджером загрузки?

еще один момент, который стоит упомянуть: в то время как эти ошибки возникают - пользователь подключен к сети WIFI (я устанавливаю диспетчер загрузки для загрузки только через Wi-Fi)

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

4b9b3361

Ответ 1

Глядя на Источник DownloadManager ERROR_HTTP_DATA_ERROR возвращается методом getErrorCode(int), это точная строка:

            case Downloads.Impl.STATUS_HTTP_DATA_ERROR:
            return ERROR_HTTP_DATA_ERROR;

android.provider.Downloads имеет статусы, которые здесь маскируются с помощью собственных констант класса DownloadManager, в source:

public static final int STATUS_HTTP_DATA_ERROR = 495;

Теперь вам нужно выяснить, что вызывает ошибку HTTP 495. После Googling я пришел узнать, что этот код ответа на ошибку относится только к Google и часто возникает при загрузке приложений из игрового магазина.

A исправлено до Go to Settings - Apps- All- Download manager and Clear data.

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

Ответ 2

какие наиболее распространенные ситуации ERROR_HTTP_DATA_ERROR могут быть запущены менеджером загрузки?

Не видя никакого кода, он угадывает работу. Из документов:

Если возникла ошибка HTTP, это будет содержать код состояния HTTP, как определено в RFC 2616.

Это даст вам стандартную ошибку HTTP, из которой вы можете найти 6.1.1 код состояния и фразу разума. Если у вас есть миллионы загрузок, и это из-за ограниченного количества сайтов, это может быть проблемой, которая выходит за пределы вашего приложения, поскольку серверы веб-сайта могут не справляться с трафиком.

и как насчет отключения сети в середине загрузки?

Проблемы с подключением к Интернету могут вызвать:

"408"  ; Section 10.4.9: Request Time-out

также вызывает ошибку ERROR_HTTP_DATA_ERROR после отказа от попыток повторной попытки диспетчера загрузки?

Возможно. Для того, чтобы он выдавал этот тип ошибок, он должен быть проблемой с приложением, которое связывается с и/или пытается и/или заканчивает загрузку на веб-сайте.

есть ли какой-либо способ получить от DownloadManager больше информации о точной ошибке HTTP?

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

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

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

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

import org.acra.*;
import org.acra.annotation.*;

@ReportsCrashes(
    formUri = "http://www.backendofyourchoice.com/reportpath"
)
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        // The following line triggers the initialization of ACRA
        ACRA.init(this);
    }
}

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

Этот блог от The Cheese Factory дает подробный обзор настроек и других параметров для отчетов об ошибках в Интернете Как настроить ACRA, систему отслеживания сбоев приложений для Android, самостоятельно хозяин Отчеты о сбоях приложений на Android

Это будет означать обновление вашего приложения, но вам все равно придется делать это из его звуков.

Ответ 3

Трудно точно сказать, в чем причина ошибки, которую вы получаете. Код ошибки, который вы получаете, является слишком общим.

Вещи, которые я сделал бы, чтобы решить проблему:

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

  • Если вы придете к выводу, что ваша проблема на стороне клиента - я бы подумал о замене Android Download Manager другим или записать ваш выигранный код, чтобы загрузить файл (ы).

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