2012-12-28 47 views
0

我正在編寫一個簡單的Android服務,它將執行一些文件IO密集型工作。 該服務將在後臺運行一段時間,初始化該服務將需要一段時間。 (由於有更多的文件需要掃描,所以需要更長的時間)。Android服務初始化。我應該使用線程嗎?

  1. 所以我認爲我應該使用線程來初始化服務,因爲服務在UI線程上運行。這是個好主意嗎?
  2. 我是否應該通過調用join()方法等待初始化線程結束並執行更少耗時的作業?

我嘗試使用線程進行初始化的原因是因爲我不希望我的服務在啓動時啓動服務來掛起。

更新 好吧,我試圖用一個服務的原因是爲外部客戶端的手段(如Web瀏覽器或PC客戶端)來訪問我的Android手機的文件。我還希望允許服務在應用程序轉到後臺時繼續運行。

+0

_「服務在UI線程上運行」_你有參考嗎? –

+1

@ K-ballo「*請注意,與其他應用程序對象一樣,服務在其宿主進程的主線程中運行。*」來自[文檔](http://developer.android.com/reference/android/app/ Service.html)。 – Eric

+0

@Eric:但服務沒有任何_UI _... –

回答

1

你真的需要服務嗎?如果你的代碼會在服務中做很多工作,那麼在一個線程中執行它總是一個好主意。如果你真的不需要服務,可以考慮使用AsyncTask。

注意:服務在其宿主進程的主線程中運行 - 服務不會創建自己的線程,也不會在單獨的進程中運行(除非另有指定)。這意味着,如果您的服務將執行任何CPU密集型工作或阻止操作(如MP3播放或網絡連接),則應在服務中創建一個新線程來完成此項工作。通過使用單獨的線程,您將降低應用程序無響應(ANR)錯誤的風險,並且應用程序的主線程可以保持專用於用戶與您的活動進行交互。

http://developer.android.com/guide/components/services.html

+0

+1,你應該按照這個建議去做「會做一些文件IO密集型工作」,服務是其他的,你肯定需要AsyncTask – 2012-12-28 18:23:45

1

看看IntentService。它會在一個單獨的線程中自動運行,並在完成工作時退出。似乎它適合你的情況。

+0

IntentService不應該只用於短操作嗎? – David

+0

不,它的用途與其他服務一樣。它只是簡化了在另一個線程中運行它(並在完成時自行停止)。 – Ralgha

相關問題