如何在Android中实现下载队列是最佳方式?
我猜测可能有一些平台类可以完成大部分工作。
在Android中实现下载队列最佳方式是什么?
使用IntentService
。它为您提供了队列和后台线程,所以您只需将下载逻辑放在onHandleIntent()
中即可。点击此处获取一个演示样例项目。
从API 11开始,一个好的方法是使用带有异步任务的FixedThreadPool。只需执行一次:
ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3);
其中3是您想同时运行的下载数量。如果已经有3个下载正在运行,它将排队任务,并自动处理任务。 使用以下命令启动异步任务:
yourAsynTask.executeOnExecutor(threadPoolExecutor, params);
Params 可能是您希望连接的 URL。您可以在 asynctask 的 onPostExecute 中读取它,并使用 HttpURLConnection 连接到服务器。
确保在关闭时调用此函数:
threadPoolExecutor.shutdown()
startService()
20次,每次都提供IntentService
所需的信息,以便知道要下载什么。当一个命令正在处理时,其他命令将在IntentService
内排队等待自己的机会。如果您想具有具有多个线程工作的下载队列,请创建自己的Service
,该服务使用ThreadPoolExecutor
,并在队列为空时调用stopSelf()
。 - CommonsWare