【问题标题】:Cancelling file download with httpclient and asynctask使用 httpclient 和 asynctask 取消文件下载
【发布时间】:2011-02-22 15:57:15
【问题描述】:

在我的应用程序中,我需要从 url 位置下载文件。我想在对话框中(或可选地在通知区域)显示下载进度。我遇到了几个关于这个主题的好资源(比如http://progrnotes.blogspot.com/2010/09/c-android.html)。不幸的是,所有示例都没有提供关于如何根据用户请求正确取消下载的明确指示。所以我的问题其实很简单:

给定一个异步任务,它在后台(使用 httpclient)下载文件并显示一个包含下载进度和取消按钮的对话框,我该如何取消下载并在按下按钮时停止后台任务?

我知道杀死线程通常不是一个好主意,所以我可能需要在后台线程中使用“取消”变量。如何从按钮向异步任务传达停止信号?

问候, 伊沃

【问题讨论】:

    标签: android httpclient android-asynctask


    【解决方案1】:

    让您的按钮调用AsyncTask.cancel(true),然后从doInBackground(Params... params) 内部检查isCancelled()。通过这种方式,您可以与后台线程沟通应该取消下载,并且您可以采取适当的步骤来停止它。

    【讨论】:

    • 谢谢,听起来像解决方案! (实际上我确实在参考资料中看到了取消选项,但我读到了有关此功能可靠性的投诉)。在我的线程中经常检查 isCancelled() 应该可以工作。
    • 它只是调用了“OnCancelled”函数,但下载任务仍在运行是不是?我想要一种方法来停止下载任务.. 怎么做
    【解决方案2】:

    我会在您的 AsyncTask 对象上调用 cancel(true)。这将通过normal interruption handling 中断您的线程。然后您可以询问 AsyncTask 是否为 isCancelled()

    【讨论】:

    • 在 AsyncTask 中加入 catch (InterruptedException e) 行表示永远不会抛出 InterruptedException。所以这似乎不是一个可行的解决方案。
    • 您对“这将通过正常的中断处理中断您的线程”的引用是什么?
    【解决方案3】:

    我建议您通过此链接了解AsyncTasks 的黑暗面http://bon-app-etit.blogspot.in/2013/04/the-dark-side-of-asynctask.html

    Google 发布了一个名为“Volley”的库,如今用于更快更好地建立网络。

    它解决了 AsyncTasks 的Bad points

    Canceling request using volley

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多