2013-03-13 70 views
0

我正在为我的android项目使用外部库。有了这个库,我从流Mp3 url获取ID3标签。该代码使用URLConnection来达到链接,然后获取标签信息。但问题是它是一个非常缓慢的过程。创建多个AsyncTask

在主线程上执行此操作时,需要超过2分钟才能从其URL中获取25首歌曲的ID3标签。所以我决定使用多个AsyncTasks来让这个过程更快,我使用下面的代码。它变得更快了一点,但在2分钟之内仍然有几秒钟。当我从DDMS中检查线程选项卡时,我发现在运行时期间,只有6个AsyncTask被创建并运行。

我的问题是,我该如何增加在这个循环中运行的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(); 
} 

回答