Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建多个异步任务_Java_Android_Multithreading_Android Asynctask_Id3 - Fatal编程技术网

Java 创建多个异步任务

Java 创建多个异步任务,java,android,multithreading,android-asynctask,id3,Java,Android,Multithreading,Android Asynctask,Id3,我正在为我的android项目使用一个外部库。有了这个库,我可以从流mp3url中获得ID3标签。代码使用URLConnection到达链接,然后获取标记信息。但问题是这是一个非常缓慢的过程 在主线程上执行此操作时,从URL获取25首歌曲的ID3标记需要2分钟以上。因此,我决定使用多个异步任务来加快进程,并使用下面的代码。它变快了一点,但仍比2分钟标记低几秒钟。当我检查DDMS中的Threads选项卡时,我发现在运行时,只有6个AsyncTask被创建并运行 我的问题是,如何在这个循环中增加正在

我正在为我的android项目使用一个外部库。有了这个库,我可以从流mp3url中获得ID3标签。代码使用URLConnection到达链接,然后获取标记信息。但问题是这是一个非常缓慢的过程

在主线程上执行此操作时,从URL获取25首歌曲的ID3标记需要2分钟以上。因此,我决定使用多个异步任务来加快进程,并使用下面的代码。它变快了一点,但仍比2分钟标记低几秒钟。当我检查DDMS中的Threads选项卡时,我发现在运行时,只有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();
}
计数器=0;
对于(最终歌曲细节e:歌曲){
新建异步任务(){
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
MP3=新的MP3(如getLink());
e、 setTitle(mp3.getTitle());
e、 setArtist(mp3.getBand());
}捕获(格式错误的异常e1){
e1.printStackTrace();
}捕获(IOE2异常){
e2.printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
计数器++;
if(计数器==songs.size()){
Log.d(“KA”,“循环完成”);
}
}
}.execute();
}

Android操作系统将决定在任何给定时间可以运行多少并行线程。仅仅因为你启动了20个,并不意味着他们都会跑。Android操作系统将对它们进行排队,并一次运行其中一些

有关更多详细信息,请参阅此答案: