0

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();
}
4

1 に答える 1

2

Android OS は、同時に実行できる並列スレッドの数を決定します。20 個起動したからといって、すべてが実行されるわけではありません。Android OS はそれらをキューに入れ、一度にいくつかを実行します。

詳細については、この回答を参照してください: Running multiple AsyncTasks at the same time -- not possible?

于 2013-03-13T15:28:15.430 に答える