Tal*_*nel 15 android http-error android-download-manager
我的应用程序在很大程度上依赖于android DownloadManager
组件来下载大小为3-10兆字节的文件.
在扩大规模(达到数百万次下载)时,整体情况很明显:
由于ERROR_HTTP_DATA_ERROR ,所有下载中约有50%失败.
我从谷歌分析中获取此信息
根据文档,此错误代码代表:
在HTTP级别发生错误接收或处理数据时COLUMN_REASON的值.
我发现这个文档不是很有用.
那里有很多http错误.
以及下载过程中的网络断开情况怎么样?它是否也在ERROR_HTTP_DATA_ERROR
失败所有下载的管理器重试尝试后触发错误?
如果有人能帮我理解,那就太好了:
DownloadManager
更多关于确切的http错误的信息?ERROR_HTTP_DATA_ERROR
下载管理器可以解决哪些最常见的情况?另一点值得一提:虽然这个错误累积 - 用户连接到WIFI网络(我设置下载管理器只能通过wifi下载)
请不要建议我根本不使用下载管理器.我知道这个选项,优点和缺点.我将此选项保存为最后的手段.
Sha*_*dge 10
查看DownloadManager 的SourceERROR_HTTP_DATA_ERROR
是由方法返回的,getErrorCode(int)
这是确切的行:
case Downloads.Impl.STATUS_HTTP_DATA_ERROR:
return ERROR_HTTP_DATA_ERROR;
Run Code Online (Sandbox Code Playgroud)
android.provider.Downloads
有源状态,这里有DownloadManager
类自己的常量被屏蔽掉的状态:
public static final int STATUS_HTTP_DATA_ERROR = 495;
Run Code Online (Sandbox Code Playgroud)
现在你必须找出导致HTTP错误的原因495
.谷歌搜索了一下之后,我发现这个错误响应代码只与谷歌有关,并且通常是在从Play商店下载应用程序时生成的.
一个修复建议,以Go to Settings - Apps- All- Download manager and Clear data.
因此,在我有限的研究结束时,我认为它是一个潜在的DownloadManager
实现相关的问题,而不是一些网络或服务器问题,并且由于没有明确的解决方案/解决方法(我的朋友也面临类似的情况),你应该尝试其他替代方案.
下载管理器可以触发哪些最常见的情况ERROR_HTTP_DATA_ERROR?
没有看到任何代码,它的猜测是有效的.来自文档:
如果发生HTTP错误,它将保存RFC 2616中定义的HTTP状态代码.
这将为您提供标准的http错误,您可以从中找到 6.1.1状态代码和原因短语.如果您有数百万的下载,并且这些来自有限的网站,这可能是一个超出您的应用程序的问题,因为该网站的服务器可能无法处理流量.
以及下载过程中的网络断开情况怎么样?
互联网连接问题可能导致;
"408" ; Section 10.4.9: Request Time-out
Run Code Online (Sandbox Code Playgroud)
在失败所有下载管理器重试尝试失败后,它是否也会触发ERROR_HTTP_DATA_ERROR错误?
有可能.对于它抛出这种类型的错误,它需要与app在网站上进行通信和/或尝试和/或完成下载的问题.
有没有办法从DownloadManager获取有关确切http错误的更多信息?
除了使用try和catch并在应用程序使用的相关方法中记录错误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);
}
}
Run Code Online (Sandbox Code Playgroud)
您还需要设置后端报告,并且随着选项的增加,提供了有关如何执行此操作的详细信息.更多细节可以在这里找到,BasicSetup.
The Cheese Factory的博客提供了有关在线错误报告的设置和其他选项的详细视图 如何在您自己的主机上设置ACRA,一个Android应用程序崩溃跟踪系统,在Android上应用程序崩溃报告
这将意味着对您的应用程序进行更新,但无论如何您都必须从它的声音中做到这一点.
归档时间: |
|
查看次数: |
3180 次 |
最近记录: |