2011-02-05 88 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()