所以我需要将多个图像上传到网络服务器。我创建了上传方法。我现在需要一种方法来建立一个上传队列,以便我可以管理和取消上传。做这样的事情的最佳方法是什么?我会为此运行服务。我正在查看IntentService类,它似乎是一个很好的方法来执行队列(因为我只需要一次上传1个文件),但我的上传将包含3个部分 - 我称之为服务器的第一部分获得授权,第二个将是实际上传,第三个将发送文件已成功发送的确认。
好的,这是交易。如何取消队列中的特定下载?如果进程位于上传的第三部分(将成功的上传信息发布到webService),如何推迟销毁服务?
答案 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()