如果AsyncTask正在进行(即使缓慢),如何停止超时



我的Android应用程序提供三种不同形式的数据传输:

  1. 查询本地数据库:如果找到,则返回结果(本地/短超时
  2. 查询远程API:典型响应大小约为1k(远程但负载很小/中等超时
  3. 下载远程文件:大小可能在100k-1MB之间(远程和大数据/长超时

这些传输是使用AsyncTask的扩展子类进行的,它们运行得很好,当然适用于步骤1和2。问题在于步骤3。

如果设备在WiFi、3G或其他相当快速的连接上,AsyncTask将不会超时,远程文件将及时下载。如果设备处于2G或连接速度较慢,则会超时-即使下载仍在进行(尽管速度较慢)。

理想情况下,我希望每隔一段时间监控下载进度,并重置AsyncTask的内部超时计数器,或者如果自上次检查以来已经取得进展,则阻止任务取消。不幸的是,这两个选项似乎都需要对AsyncTask的私有超时变量进行读或写访问。

当下载进度仍在继续时,如何防止AsyncTask超时?

编辑:我刚刚注意到StackOverflow为我提供了Android下载管理器的标签。这就是ADM的设计目的吗?

我将在这里回答我自己的问题,或者至少是编辑,说最终我实现了Android的DownloadManager,以确保后台下载可以以允许的任何速度继续。然后,我实现了一个Manifest声明的Receiver,它启动了一个服务,将响应插入数据库。最后,通过工具栏通知用户下载已经完成,他们可以返回应用程序查看结果。

然而,我不会接受我自己的答案:-),因为我还没有回答是否可以按照我要求的方式停止AsyncTask超时。但我所发现的一切都表明答案是否定的。

最新更新