Android 如果异步任务超时';(即使进展缓慢)

Android 如果异步任务超时';(即使进展缓慢),android,android-asynctask,download,android-download-manager,Android,Android Asynctask,Download,Android Download Manager,我的Android应用程序有三种不同的数据传输形式: 查询本地数据库:如果找到,则返回结果(本地/短超时) 查询远程API:典型响应大小约为1k(远程但很小的负载/中等超时) 下载远程文件:大小可能在100k到1MB之间(远程和大数据/长超时) 这些传输是使用AsyncTask的扩展子类进行的,它们工作得非常好,当然是在步骤1和2中。问题在于步骤3 如果设备使用WiFi、3G或其他相当快的连接,异步任务将不会超时,远程文件将及时下载。如果设备处于2G或慢速连接状态,即使下载仍在进行中,它也会超时

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

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

    如果设备使用WiFi、3G或其他相当快的连接,异步任务将不会超时,远程文件将及时下载。如果设备处于2G或慢速连接状态,即使下载仍在进行中,它也会超时(尽管速度较慢)

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

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


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

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

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