在Android下载队列

在Android中实现下载队列的最佳方式是什么?

我怀疑可能有一些平台类可能会做大部分的工作。

Solutions Collecting From Web of "在Android下载队列"

在Android中实现下载队列的最佳方式是什么?

使用IntentService 。 它为你提供了队列和后台线程,所以你所要做的就是把你的下载逻辑放在onHandleIntent() 。 看到这里展示一个示例项目 。

我会build议看看java.util.concurrent包,更具体地说,阅读执行

您可以创build一个ExecutorService,该程序一次只能运行“n”个Runnable对象,并自动排队其余的任务。 一旦正在执行的线程中的一个完成执行,它将拾取队列中的下一个Runnable对象以供执行。

使用IntentService会使支持取消变得非常困难。 这只是你需要注意的事情。 如果可以的话,它是API级别9,您将更好地使用http://developer.android.com/reference/android/app/DownloadManager.html

从API 11起,一个好的方法是使用带有asynchronous任务的FixedThreadPool。 做一次:

 ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3); 

其中3是您想要同时运行的下载数量。 如果已经有3个下载正在运行,它将对任务进行排队,并在稍后自动处理任务。 启动您的asynchronous任务:

 yourAsynTask.executeOnExecutor(threadPoolExecutor, params); 

Params可能是你想连接的url。 您可以在您的asyncTask的onPostExecute中读取它,并使用HttpURLConnection连接到服务器。

确保在关机时closures此function:

 threadPoolExecutor.shutdown()