2014-02-24 61 views
0

我如何在Android中完成多項後臺任務? 我在我的活動中有三個複選框。圖像,音頻和視頻。所以我有3個長時間的後臺任務(相互獨立)要做。所以,我寫了一個上傳圖片的服務類。我的問題是,對於上傳視頻和音頻的第二和第三個任務,我應該再製作兩個服務類嗎?如果用戶每次選中三個框,執行這三項任務的最佳方式是什麼?android多項任務的單項服務

而我的第二個問題是我已經看到有人在服務內部使用異步任務進行長時間後臺處理。我想知道你是否使用服務,那麼爲什麼需要異步任務?這是一個更好的方式來使用這樣的任務服務內的asynctask?

回答

0

服務在主線程上運行。認爲服務運行在另一個線程上是一個巨大的錯誤。這就是爲什麼你需要一個AsyncTask()或一個Runnable()或一個Thread()。

因此,如果您已經決定創建一個服務,那麼最好的做法是在服務內部創建1,2或3個線程。

但問問自己,爲什麼你首先使用服務?即使應用程序不在前臺,服務也可以工作。所以也許你根本不需要服務,你可以在活動本身中創建後臺線程。

+0

好耶我需要一項服務,因爲我想每次都保留備份圖片或視頻。所以我可以爲這三項任務使用三項服務嗎?這是一種更好的方法嗎?或者在服務中創建三個線程? – hellosheikh

+0

我肯定會使用3線程的單一服務。將3個線程的邏輯封裝在一個服務中要比3個服務容易得多。 – Merlevede

+0

好吧,我遵循你的意見然後 – hellosheikh

0

服務是專爲長時間運行的後臺任務而設計的。服務的用例是在App在後臺運行。或者當您在活動之間切換時,該任務不會被殺死。

但它像UI一樣運行在UI線程中。這就是爲什麼你必須使用Thread或AsyncTask來阻止UI線程。如果您在一個服務中爲不同的作業提供了一些獨立的線程/異步任務,那就好了。就你而言,每個複選框都可以在此服務中運行不同的線程。

+0

以及服務之前,我正在使用asynctask上傳。但是然後我的應用程序變慢,有時複選框凍結,有時會給我強制關閉消息 – hellosheikh

+0

在這種情況下,在您的問題中添加一些相關代碼,以便我們可以看到發生了什麼。 –