我有一個應用程序目前上傳圖像到服務器。要上傳這些圖片,我使用了一個AsyncTask,它可以正常工作。它上傳圖像,顯示通知以及進度。對於多個圖像,創建單獨的異步任務。但我需要更多的東西:後臺服務執行上傳
- 而不是創建多個AsyncTasks,我想排隊在同一個線程的上傳。
我認爲背景服務是我需要的。我的問題是我可以使用服務來完成這些任務:
- 當UploadActivity打開時,它會檢查服務是否正在運行。如果服務正在運行,它會更新UI以顯示當前正在上傳的圖像。 (我維護一個用於上傳的SQLite數據庫,所以如果我能檢測到服務正在運行,我可以從表中獲取結果以查看哪些文件在隊列中)。
- UploadActivity包含一個RecyclerView,它顯示尚未上傳的文件。觸摸一個項目也應該檢查服務是否正在運行。如果服務沒有運行,它應該啓動服務,並排隊觸摸的項目上傳。如果服務正在運行,那麼它只是將文件排隊以便上傳。
- UploadActivity應該不斷接收來自服務的更新,以便用戶獲得上傳進度的視圖(這將顯示在通知面板中,但我需要進度和其他細節也顯示在活動中) 。
我的主要障礙是檢測服務是否正在運行。另外,是否有可能讓服務知道我已經向隊列中添加了另一個文件(將文件添加到隊列中只是將SQL插入到表中。一旦活動說明文件具有該服務,服務應該將新文件附加到隊列中被添加)
編輯:
這裏是什麼我試着去實現一個僞代碼:
Service service = new Service();
If service.isRunning{
service.itemAddedToQueueAndUpdateNotification()
}else{
service.start()
}
有些回調像
onServiceUpdateRecieved(){
//Update UI
}
您可以使用[SharedPreferences](http://developer.android.com/training/basics/data-storage/shared-preferences.html)條目來標記狀態 – denispyr
@denispyr哦。有沒有isRunnjng()方法我可以使用? –
您也可以使用SharedPReferences按順序標記哪個_id是插入的最後一個,哪個是最後一個上載/排隊。 – denispyr