直到android下载管理器何时会通过下载参考Id给出下载状态



我有一个用例,其中

我开始使用android下载管理器下载一个文件,并在中间关闭了手机。当我再次重新启动时,下载继续并完成。我通过提供下载参考id获得了状态。但即使在使用该参考id 10天后,我也想知道状态。

所以我的问题是,直到android下载管理器何时会通过下载参考Id给出下载状态?

我查阅了文档,浏览了一遍堆叠流程,但找不到答案。有人帮我。

AndroidDownloaderManager是一项系统服务。它应该一直在运行。但在某些情况下,它无法运行。

下载通过HTTP持久连接进行。这意味着相同的已建立连接用于连续的HTTP请求/响应。连接中断意味着发生错误,因此,您无法通过参考id跟踪状态。

您通过AndroidDownloadManager服务进行跟踪,其中AndroidDownloadManager服务从服务器获取STATUS代码。

Android下载管理器使用基于content-length的服务器下载。Content-Length标头将不允许流式传输(链接)。基于内容长度的下载具有恢复、暂停、部分下载的优点——请参阅上面的链接1。因此,即使重新启动系统,它也会重新启动(增量)下载。

基于content-length的下载是store and forward(链接)。您应该将缓冲的内容转发到持久存储,因为您的固定缓冲区有限。

AndroidDownloadManager具有ERROR_CANNOT_RESUME int标志(链接)。CCD_ 11是基于CCD_。COLUMN STATUS有两种类型:STATUS_PAUSEDSTATUS_FAILED。在系统关闭前,系统通过BroadcastReceiver向安卓DownloadManager发送关于关闭的服务,安卓DownloadManager激活STATUS_PAUSED标志。并且,下次重新启动设备时,系统服务会自动运行,检查STATUS_PAUSED是否再次开始下载。

答案:因此,在出现错误(在客户端、连接或服务器端)或您没有完成文件下载(意味着直到STATUS_SUCCESSFUL)之前,您将一直从AndroidDownloadManager获取状态。当发生STATUS_FAILED时,您无法获得状态——它表示不会重试下载(链接)。

STATUS_FAILED是如何发生的?客户端的DownloadManager服务检测到HTTP状态代码4XX(服务器猜测客户端出错)和5XX(服务器检测服务器出错)(链接),现在STATUS_FAILED变为true。

其他一些情况:当客户端一直处于关闭状态并且基于服务器逻辑时,服务器可以在超时时终止连接。因此,此控件显式地基于不同的HTTP服务器。我们不能在这里问这么多天。我们不知道服务器端的逻辑。状态代码基于服务器。当服务器决定客户端失败时,服务器执行timeout连接,使STATUS_FAILED在服务器端处于活动状态。客户端必须为TCP连接在任意时间消失做好准备,并且必须能够重新建立连接并重试HTTP请求。过早关闭的连接不应被视为错误;只有在重新建立连接的尝试失败时才会发出错误信号。你的问题没有确切的答案

注意TCP connections to disappear at arbitrary times(链接)是此处的主要逻辑,可以在设备关闭一定天数后恢复连接。

1) 在STATUS_FAILED上,您无法继续跟踪更多数据。

2) 在上,如果COLUMN_STATUS既不是STATUS_FAILED也不是STATUS_PAUSED,则此列的值未定义,因此您可能无法跟踪更多数据。

-除上述两种情况外的任何情况,下载都在进行中

您可以使用SharedPreferences来存储您的下载参考ID。类似这样的东西-

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

您可以稍后使用此检索ID

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

相关内容

  • 没有找到相关文章

最新更新