2011-02-05 50 views
5

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

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

回答

3

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

IntentService,你没有。您需要编写自己的Service,其行为类似于IntentService(后台线程,工作队列,stopSelf(),当队列为空时),但您可以在哪里更好地管理队列。

如何推迟服务的销毁过程是否在上传

的第三部分,如果你正在使用IntentService或您自己的IntentService -workalike,该服务通常不会直到没有更多的工作要完成。

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

+0

确定。明确。有没有任何例子可以帮助我如何创建像你描述的服务? – DArkO 2011-02-05 16:10:32

0

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

ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3); 

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

yourAsynTask.executeOnExecutor(threadPoolExecutor, params); 

PARAMS可能是要连接到的URL。您可以在您的async服务器的onPostExecute中读取它,并使用HttpURLConnection连接到服务器。

,请务必让这倒在关机:

threadPoolExecutor.shutdown()