Android プロジェクトに外部ライブラリを使用しています。そのライブラリを使用して、ストリーム Mp3 URL から ID3 タグを取得しています。コードは URLConnection を使用してリンクに到達し、タグ情報を取得します。しかし、問題はその手順が非常に遅いことです。
メインスレッドで実行すると、URL から 25 曲の ID3 タグを取得するのに 2 分以上かかります。そこで、複数の AsyncTasks を使用してプロセスを高速化することにし、以下のコードを使用しました。少し速くなりましたが、それでも 2 分を数秒下回っています。DDMS の [スレッド] タブを確認したところ、実行時に AsyncTask が 6 つだけ作成されて実行されていることがわかりました。
私の質問は、このループで実行中の AsyncTask の数を増やすにはどうすればよいかということです。
counter=0;
for (final SongDetail e : songs) {
new AsyncTask<Void , Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
MP3 mp3 = new MP3(e.getLink());
e.setTitle(mp3.getTitle());
e.setArtist(mp3.getBand());
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
counter++;
if(counter==songs.size()) {
Log.d("KA","loop finished");
}
}
}.execute();
}