2016-12-31 35 views
-1

我想要做的事理論上聽起來很簡單 - 我需要掃描設備中存在的所有MP3文件,並通過查詢諸如AcoustIdGraceNote之類的內容來執行元數據更新。在IntentService中啓動多線程

我打算通過擴展IntentService來使用類,並且在onHandleIntent()中,我計劃創建N個線程,每個線程更新單個文件的元數據。我使用IntentService的主要原因是我不需要與UI線程進行通信,並且手頭的任務相對耗時。

我的主要問題是:IntentService是否支持自定義線程?如果不是,我最好的選擇是什麼?我知道我不應該使用AsyncTask s,因爲它們只用於相對較小的計算。

在此先感謝!

回答

2

不,IntentService只有一個工作線程,順序處理傳入的Intents。如果你想做更復雜的事情,你應該只擴展Service

+0

沒有什麼能阻止筆者從產卵自己的線程雖然 –

+1

@OlegBogdanov - 除非你延長'IntentService'中,服務在完成'onHandleIntent'後立即停止,使其成爲產生自己線程的可怕選擇。 – ianhanniballake

1

產卵N個線程永遠聽起來像一個偉大的想法,尤其是當你的任務列表是未綁定的(誰知道有多少MP3曲目你有)

一個可以使用的便利的是Android的threadpool,這將使你級並行的,但也有一些理智的界限

注意AsyncTask不用於不便需要幾分鐘或幾個小時,但一個或兩個HTTP查詢的運行完全可以使其在推薦「幾秒鐘的時間內

最重要的是這個您所描述的所有操作都是I/O,如果您有權訪問異步I/O API,則根本不需要額外的線程,所有線程只會等待網絡或文件系統訪問,因此非常浪費。如果你能負擔得起使用(與學習)AsynchronousFileChannelAsyncHttpClient它可以使在質量和可擴展性方面很大的區別你的應用程序

+1

謝謝奧列格,我一定會閱讀上述材料。 –