2016-02-12 41 views
0

我想實現一個後臺隊列。它的工作原理是:當用戶點擊一個按鈕時,添加一個任務(這個任務需要時間完成)到隊列中,隊列應該在後臺線程上運行。如果用戶再次單擊按鈕,則在隊列中添加另一個任務。後臺線程逐個運行隊列中的任務,直到隊列爲空。我只想要1個後臺線程在任務上工作。我可以使用什麼樣的android功能?或者是否有任何例子?如何在android中實現背景隊列?

+0

創建一個需要處理的工作列表,一旦用戶單擊一個元素,啓動一個AsyncTask,並跟蹤該任務以瞭解它是否已完成工作。如果用戶點擊一個新項目,將其添加到隊列中。如果異步完成,請啓動一個新的。 –

+0

聽起來像你想要使用['Handler'](0123)http://developer.android.com/reference/android/os/Handler.html –

+0

你可以使用intent服務來排列任務 - 它使用一個worker線。 docs - http://developer.android.com/reference/android/app/IntentService.html –

回答

1

至少有幾種方法可以解決這個問題。您可以嘗試使用Executors等低級別的實現,但我會試一試Evernote的android-job庫。

+0

我不會使用AsyncTasks和執行程序「低級別」調用。這正是平臺爲這些任務提供的。我沒有任何對付有用庫的東西,但AsyncTasks實現相當簡單。 –

+0

你是對的,但是使用Executor可能對每個人都不那麼明顯,並且需要一些關於併發的知識,所以我不會說這很容易。此外,AsyncTask有一些穩定性問題,沒有錯誤處理,我會避免使用它。你提出的方法需要編寫類似的工具,我從頭開始連接上面的「重新發明輪子」。如果你想使用SDK中的東西,我建議使用Job Scheduler,但它只能在最新的Android API中使用。 –

+0

重塑車輪?您創建一個擴展AsyncTask來執行後臺邏輯的類。調用Executors.newSingleThreadScheduledExecutor()來創建一個單線程執行程序,並在執行時將它交給每個AsyncTask。沒有太多。 –