我有N个文件要下载。我想在后台连续下载它们 - 一个接一个。我想在ListView中显示进度和状态。所以,ListView看起来像:
File1 ...已下载
文件2 ....下载
File3 ...正在进行中说39%
File4 ...待定
...
Listview定期刷新(比如每2秒),文件很大:50 MB左右。所以他们需要1分钟才能下载。
我会将文件URL列表传递给AsyncTask并将其下载到后台。问题是如何将进度反馈回ListView。
考虑用户可能会离开ListView页面离开AsyncTask只能返回以查看下载状态。
那么ListView如何“观察”AsyncTask的进度并显示它?
我正在考虑添加一组静态变量AsyncTask(使用“Synchronized”块保护它们)并在Fragment中使用显示ListView的定期UI Updater。所以片段会有这样的东西:
Repeat a task with a time delay?
是否有设计模式,公共项目或示例代码?
对不起,我不是一张好照片。我所描述的最接近的是(类似但我计划使用AsyncTask和串行下载):
答案 0 :(得分:5)
请按照以下步骤操作
答案 1 :(得分:1)
开始下载时,您可以使用进度条的引用并使用处理程序进行更新。
Asynctask对你来说不是一个好主意。在深入了解Asynctask之前,您应该阅读this。
对于持久的后台操作,您应该查看Service。 [IntentService]是一个很好的候选者,因为它使用队列来跟踪多个请求。 Boundservice这种情况很好的选择。
或者,如果您想要更多地控制线程池和执行,您可以考虑使用阻塞队列和Executor编写自己的下载程序,在那里您将能够控制线程数和队列大小