如果AsyncTask正在进行(如果它正在缓慢),如何停止

时间:2014-11-11 11:26:10

标签: android android-asynctask download android-download-manager

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

  1. 查询本地数据库:如果找到则返回结果(本地/短暂超时);
  2. 查询远程API :典型响应大小约为1k(远程但微小的有效负载/中等超时);
  3. 下载远程文件:大小可能介于100k - 1MB之间(远程和大数据/长超时)。
  4. 这些传输是使用AsyncTask的扩展子类进行的,它们运行得非常好,当然对于步骤1和2.问题在于步骤3.

    如果设备使用WiFi,3G或其他合理快速的连接,AsyncTask将不会超时并且远程文件会及时下载。如果设备处于2G或慢连接状态,它将超时 - 即使下载仍在进行(尽管速度很慢)。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

但是,我不会接受我自己的答案:-)因为我还没有回答是否有可能以我问的方式停止AsyncTask超时。但我发现的一切都表明答案是“没有”。