2014-04-07 75 views
0

我是Android應用程序開發新手。我的第一個項目是創建一個調諧器,它需要實時記錄音頻並進行分析。Android:背景計算選項

我已閱讀在Android的後臺操作了很多,但我無法決定使用什麼:

  • 的AsyncTask:Android文檔說,它應保持短的計算,但我需要分析數據超過幾秒鐘。

  • Intentservice:更適合長時間計算,但無論何時我想用按鈕都無法停止。

  • 工作者線程:限制似乎與Asynctask類似。

以下鏈接是我發現的一個例子,與我想要做的相似。工作者線程仍然是長時間計算的理想選擇嗎?使用帶有標誌的while循環停止計算是否線程安全?

http://developer.samsung.com/android/technical-docs/Displaying-Sound-Volume-in-Real-Time-While-Recording

編輯:我已經成功創建了一個綁定的服務。在這個服務中,創建一個新線程來更新循環中的值,然後進行廣播。但是當我從服務中解除綁定時,線程繼續運行。即使關閉應用程序並重新啓動,該值仍會更新。

所以我回到我最初的問題。這樣的線程是如何停止的?

編輯:問題解決onUnbind()中激活一個簡單的標誌,停止線程內的循環。

回答

0

你實際上想要一個Service,但不是IntentService。您需要一個Service,它將在後臺運行,並且可以通過Activity進行控制(並且在Activity關閉後將繼續工作)。這是這種任務的通用架構。下面是Android的開源音樂播放器的一個例子:

https://github.com/kreed/vanilla/blob/master/src/org/kreed/vanilla/PlaybackService.java

+1

請默認主線程上運行的腦海服務,但在服務線程可能會做。 – AdamM

+0

感謝您的快速回復。綁定的服務似乎是我正在尋找的。我的應用程序結構是1個活動和2或3個片段,所以當活動關閉時,我不需要該服務繼續運行。我其實想要的是相反的。 – Iodestar