Java 创建多个异步任务
我正在为我的android项目使用一个外部库。有了这个库,我可以从流mp3url中获得ID3标签。代码使用URLConnection到达链接,然后获取标记信息。但问题是这是一个非常缓慢的过程 在主线程上执行此操作时,从URL获取25首歌曲的ID3标记需要2分钟以上。因此,我决定使用多个异步任务来加快进程,并使用下面的代码。它变快了一点,但仍比2分钟标记低几秒钟。当我检查DDMS中的Threads选项卡时,我发现在运行时,只有6个AsyncTask被创建并运行 我的问题是,如何在这个循环中增加正在运行的异步任务的数量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被创建并运行 我的问题是,如何在这个循环中增加正在
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操作系统将对它们进行排队,并一次运行其中一些
有关更多详细信息,请参阅此答案: