2016-03-08 77 views
0

我有一個應用程序目前上傳圖像到服務器。要上傳這些圖片,我使用了一個AsyncTask,它可以正常工作。它上傳圖像,顯示通知以及進度。對於多個圖像,創建單獨的異步任務。但我需要更多的東西:後臺服務執行上傳

  • 而不是創建多個AsyncTasks,我想排隊在同一個線程的上傳。

我認爲背景服務是我需要的。我的問題是我可以使用服務來完成這些任務:

  • 當UploadActivity打開時,它會檢查服務是否正在運行。如果服務正在運行,它會更新UI以顯示當前正在上傳的圖像。 (我維護一個用於上傳的SQLite數據庫,所以如果我能檢測到服務正在運行,我可以從表中獲取結果以查看哪些文件在隊列中)。
  • UploadActivity包含一個RecyclerView,它顯示尚未上傳的文件。觸摸一個項目也應該檢查服務是否正在運行。如果服務沒有運行,它應該啓動服務,並排隊觸摸的項目上傳。如果服務正在運行,那麼它只是將文件排隊以便上傳。
  • UploadActivity應該不斷接收來自服務的更新,以便用戶獲得上傳進度的視圖(這將顯示在通知面板中,但我需要進度和其他細節也顯示在活動中) 。

我的主要障礙是檢測服務是否正在運行。另外,是否有可能讓服務知道我已經向隊列中添加了另一個文件(將文件添加到隊列中只是將SQL插入到表中。一旦活動說明文件具有該服務,服務應該將新文件附加到隊列中被添加)

編輯:

這裏是什麼我試着去實現一個僞代碼:

Service service = new Service(); 
    If service.isRunning{ 
      service.itemAddedToQueueAndUpdateNotification() 
    }else{ 
     service.start() 
    } 

有些回調像

onServiceUpdateRecieved(){ 
       //Update UI 
    } 
+0

您可以使用[SharedPreferences](http://developer.android.com/training/basics/data-storage/shared-preferences.html)條目來標記狀態 – denispyr

+0

@denispyr哦。有沒有isRunnjng()方法我可以使用? –

+0

您也可以使用SharedPReferences按順序標記哪個_id是插入的最後一個,哪個是最後一個上載/排隊。 – denispyr

回答

1

你可以使用Intent來廣播新的時間表(由活動發送,由服務接收)或實際上傳結果(由服務發送,由活動接收,如果活動)

+0

謝謝。使用意圖我能解決我的一些問題。 –

0

我會建議使用執行程序服務和繼續添加圖像上傳到其隊列。每個上傳任務將一個接一個地發送。這將更容易管理,你甚至可以爲任務完成添加回調,並在需要時更新UI。