在我的应用中,我需要从网址中下载文件。我想在对话框中(或可选地在通知区域中)显示下载的进度。我在这个问题上遇到过几个很好的资源(像http://progrnotes.blogspot.com/2010/09/c-android.html)。不幸的是,所有示例都没有提供关于如何根据用户的请求正确取消下载的明确指示。所以我的问题其实很简单:
鉴于asynctask在后台下载文件(使用httpclient)并显示带有下载进度和取消按钮的对话框,如何在按下按钮时取消下载并停止后台任务?
我知道杀死线程通常不是一个好主意,所以我可能需要在后台线程中使用'cancel'-variable。如何将按钮的停止信号传递给asynctask?
此致 IVO
答案 0 :(得分:3)
按住AsyncTask.cancel(true)
按钮,然后从isCancelled()
内查看doInBackground(Params... params)
。通过这种方式,您可以向后台线程传达应该取消下载的内容,并且您可以采取适当的步骤来停止下载。
答案 1 :(得分:3)
我会在你的AsyncTask对象上调用cancel(true)。这将通过normal interruption handling中断您的线程。然后,您可以询问AsyncTask isCancelled()。
答案 2 :(得分:0)
我建议你仔细阅读 AsyncTasks的黑暗面:http://bon-app-etit.blogspot.in/2013/04/the-dark-side-of-asynctask.html。
谷歌发布了一个名为“Volley”的图书馆,现在用于更快更好的网络。
它解决了AsyncTasks的坏点。