2016-12-31 7 views
-1

私がやりたいことは理論的にはとても単純です。デバイスに存在するすべてのMP3ファイルをスキャンし、AcoustIdまたはGraceNoteのようなクエリを実行してメタデータを更新する必要があります。IntentService内で複数のスレッドを起動する

IntentServiceを拡張してクラスを使用する予定です。onHandleIntent()では、1つのファイルのメタデータを更新するN個のスレッドを作成する予定です。私がIntentServiceを使用している主な理由は、UIスレッドとの通信が不要で、手元にあるタスクが比較的時間がかかるということです。

私の主な質問はこれです:IntentServiceはカスタムスレッドをサポートしますか?そうでない場合、私の最良の選択肢は何ですか?私はAsyncTaskを使ってはならないことを知っています。比較的小さな計算にしか使われていないからです。

ありがとうございます!

答えて

2

いいえ、IntentServiceには、受信インテントを順番に処理するワーカースレッドが1つしかありません。より複雑なことをしたい場合は、Serviceを拡張するだけです。

+0

何が自身のスレッドを産卵から作者を防止していないアプリの品質と拡張性の面で大きな違いを生むことができ –

+1

@OlegBogdanovけれども - あなたは 'IntentService'、拡張する場合を除き、 onHandleIntentを終了するとすぐにサービスが停止し、自分のスレッドを生成するための恐ろしい選択となります。 – ianhanniballake

1

産卵Nスレッドは、あなたのタスクのリストが結合していない場合は特に、素晴らしいアイデアのように聞こえることはありません(誰が、多くのmp3の曲は、あなたが持っている方法を知っている)

使用できる便利の一つは、与えることをAndroidのthreadpoolですあなた並列処理のレベルだけでなく、いくつかのまともな境界

分または数時間のために実行する必要がありますが、1つのまたは2つのHTTPクエリは完全にお勧め「数秒」の時間枠

でそれを行うことができますAsyncTaskがなめらかために意図されていないことに注意してくださいしかし、最も重要なのはそれですあなたが説明したすべての操作はI/Oであり、非同期入出力APIにアクセスできる場合は余分なスレッドを必要とせず、すべてのスレッドがネットワークまたはファイルシステムへのアクセスを待っているだけで無駄です。あなたが使用して(学習)AsynchronousFileChannelAsyncHttpClient余裕があれば、それは

+1

ありがとうOleg、私は間違いなく上記の資料を読み上げます。 –

関連する問題