创建上传队列

时间:2011-02-05 13:59:09

标签: android service upload android-intent

所以我需要将多个图像上传到网络服务器。我创建了上传方法。我现在需要一种方法来建立一个上传队列,以便我可以管理和取消上传。做这样的事情的最佳方法是什么?我会为此运行服务。我正在查看IntentService类,它似乎是一个很好的方法来执行队列(因为我只需要一次上传1个文件),但我的上传将包含3个部分 - 我称之为服务器的第一部分获得授权,第二个将是实际上传,第三个将发送文件已成功发送的确认。

好的,这是交易。如何取消队列中的特定下载?如果进程位于上传的第三部分(将成功的上传信息发布到webService),如何推迟销毁服务?

2 个答案:

答案 0 :(得分:3)

  

如何取消队列中的特定下载?

使用IntentService,您不会。您需要编写自己的Service,其行为类似IntentService(后台线程,工作队列,队列为空时为stopSelf()),但您可以更好地管理队列。

  

如果流程位于上传的第三部分,如何推迟销毁服务

如果您使用IntentService或您自己的IntentService - workalike,通常不会销毁该服务,直到没有其他工作要做。

如果您担心Android关闭您的服务,因为它认为您的内存时间过长,请使用startForeground()

答案 1 :(得分:0)

从API 11开始,一个好的方法是使用带有异步任务的FixedThreadPool。做一次:

ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3);

其中3是您想要同时运行的下载次数。如果已经运行了3次下载,它将对任务进行排队,并在以后自动处理该任务。 使用以下命令启动异步任务:

yourAsynTask.executeOnExecutor(threadPoolExecutor, params);

Params可能是您希望连接的网址。您可以在asynctask的onPostExecute中读出它,并使用HttpURLConnection连接到服务器。

确保在关机时调用此功能:

threadPoolExecutor.shutdown()