Android DownloadManager-理解错误\u HTTP\u数据\u错误

Android DownloadManager-理解错误\u HTTP\u数据\u错误,android,android-download-manager,http-error,Android,Android Download Manager,Http Error,我的应用程序严重依赖安卓DownloadManager组件来下载大约3-10兆字节大小的文件 当扩展到(数百万次下载)时,大局是清楚的: ~50%的下载由于以下原因而失败 我从google analytics获得这些信息 根据文档,此错误代码表示: 在HTTP级别接收或处理数据时发生错误时列_REASON的值 我发现该文档的信息量不大。 存在大量http错误 在下载过程中,网络断开如何?在下载的管理器重试尝试失败后,它是否也会触发错误\u HTTP\u DATA\u错误错误 如果有人能帮助我了解

我的应用程序严重依赖安卓
DownloadManager
组件来下载大约3-10兆字节大小的文件

当扩展到(数百万次下载)时,大局是清楚的:

~50%的下载由于以下原因而失败

我从google analytics获得这些信息

根据文档,此错误代码表示:

在HTTP级别接收或处理数据时发生错误时列_REASON的值

我发现该文档的信息量不大。
存在大量http错误

在下载过程中,网络断开如何?在下载的管理器重试尝试失败后,它是否也会触发
错误\u HTTP\u DATA\u错误
错误

如果有人能帮助我了解:

  • 有没有办法从DownloadManager获取有关确切http错误的更多信息
  • 下载管理器可以触发的最常见情况是什么
值得一提的另一点是:当这种错误不断累积时,用户连接到WIFI网络(我将download manager设置为仅通过WIFI下载)

请不要建议我不要使用下载管理器。我知道这个选择的优点和缺点。我把这个选项留作最后的选择

下载管理器可以触发的最常见的错误\u HTTP\u数据\u错误情况是什么

没有看到任何代码,这是猜测工作

如果发生HTTP错误,这将保留RFC 2616中定义的HTTP状态代码

这将为您提供一个标准http错误,您可以从中找到一个。如果你有数以百万计的下载,并且这些下载来自有限的网站,这可能是一个超出你的应用程序范围的问题,因为网站的服务器可能无法应对流量

<>和在下载中间的网络断开怎么办? 互联网连通性问题可能导致:

"408"  ; Section 10.4.9: Request Time-out
在所有下载的管理器重试尝试失败后,它是否也会触发错误\u HTTP\u DATA\u错误

可能吧。若要抛出此类错误,应用程序与网站通信和/或尝试和/或完成下载时需要出现问题

有没有办法从DownloadManager获得有关确切http错误的更多信息

除了在应用程序使用
DownloadManager
的相关方法中使用try-and-catch并记录错误,然后在出现此错误时测试并等待logcat之外,另一个选项是远程使用库或第三方工具获取已部署应用程序的远程错误记录和崩溃报告

有很多第三方服务和图书馆提供这种服务,我以一个著名的开源图书馆为例

至于在线错误和崩溃日志,它是开源的,并提供此功能。过去,谷歌使用谷歌产品免费存储报告,但随着使用量的增加,谷歌已经撤销了这一支持,但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);
    }
}
您还需要设置后端报告,并且随着选项的增加,提供了有关如何执行此操作的详细信息。更多细节可在此处找到

Cheese Factory的这篇博客详细介绍了在线错误报告的设置和其他选项


这意味着要更新你的应用程序,但无论如何你都必须从声音上做到这一点。

很难确切地说出你出现错误的原因。您收到的错误代码太笼统

为解决问题,我将采取以下措施:

  • 尝试查看服务器负载或服务器活动与下载失败次数之间是否存在任何关联。这将有助于确定问题是否源于服务器。如果确实如此,您可以增加服务器端的资源,或者尝试找到一种方法来减少服务器上的负载,以最小化与下载相关的问题。繁重的服务器负载或大量并发下载可能会导致像您所遇到的问题(瓶颈、超时、服务器端资源锁定等)

  • 如果你得出的结论是你在客户端的问题-我会考虑用另一个替换Android下载管理器或者写你的赢得代码来下载文件。

    我不得不说,Yvette女士提出增加更多日志记录是很重要的。我在我所有的应用程序中都这么做。一旦您发布了有关问题的更多信息,我们将能够定位问题并更快地解决它。

    查看
    错误\u HTTP\u数据\u错误
    由方法
    getErrorCode(int)
    返回,这是确切的一行:

                case Downloads.Impl.STATUS_HTTP_DATA_ERROR:
                return ERROR_HTTP_DATA_ERROR;
    
    android.provider.Downloads
    的状态在这里用
    DownloadManager
    类自身的常量屏蔽,在其:

    现在,您必须找出导致HTTP错误的原因
    495
    。在谷歌搜索了一段时间后,我发现这个错误响应代码只与谷歌有关,通常是在从playstore下载应用程序时产生的

    A至
    进入设置-应用程序-全部-下载管理器并清除数据。

    因此,在我有限的研究结论中,我认为这是一个潜在的
    DownloadManager
    实现相关问题,而不是一些网络或服务器问题,并且由于没有明确的解决方案/解决方法可用(我的朋友也面临类似的情况)
    public static final int STATUS_HTTP_DATA_ERROR = 495;